设为首页 加入收藏

TOP

Windows编程:位图背景与画刷(五)
2013-09-24 09:25:22 来源: 作者: 【 】 浏览:989
Tags:Windows 编程 位图 背景

 

  位图画刷的创建函数为CreatePatternBrush,其函数原型如下:

  HBRUSHCreatePatternBrush(

  HBITMAPhbmp // handle to bitmap

  );

  只要给这个函数传入位图句柄即可,完整代码如下(下载地址为:http://download.csdn.net/download/morewindows/4947377):

  双击代码全选

  // 对话框位图背景 - 直接在WM_CTLCOLORDLG中使用位图画刷

  //By MoreWindows-(http://blog.csdn.net/MoreWindows)

  #include

  #include "resource.h"

  const char szDlgTitle[] = "位图画刷 MoreWindows-(http://blog.csdn.net/MoreWindows)";

  // 对话框消息处理函数

  BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);

  int APIENTRY WinMain(HINSTANCE hInstance,

  HINSTANCE hPrevInstance,

  LPSTR lpCmdLine,

  int nCmdShow)

  {

  DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);

  return 0;

  }

  BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

  {

  static HBRUSH s_hBitmapBrush; //位图画刷

  switch (message)

  {

  case WM_INITDIALOG:

  // 设置对话框标题

  SetWindowText(hDlg, szDlgTitle);

  // 设置对话框大小可调节

  SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);

  // 加载背影图片

  HBITMAP hBitmap;

  hBitmap = (HBITMAP)LoadImage(NULL, "005.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

  if (hBitmap == NULL)

  {

  MessageBox(hDlg, "LoadImage failed", "Error", MB_ICONERROR);

  exit(0);

  }

  // 创建位图画刷

  s_hBitmapBrush = CreatePatternBrush(hBitmap);

  return 0;

  case WM_COMMAND:

  switch (LOWORD(wParam))

  {

  case IDCANCEL:

  DeleteObject(s_hBitmapBrush);

  EndDialog(hDlg, LOWORD(wParam));

  return TRUE;

  }

  break;

  case WM_CTLCOLORDLG:

  return (BOOL)s_hBitmapBrush;

  }

  return FALSE;

  }

  运行结果如下:

  注意,这两做法在窗口大小超过位图大小时会表现不同,前一种做法会拉伸位图以适应窗口大小,后一种做法是直接平铺。详见下图:

  本篇《Windows界面编程(www.cppentry.com)第一篇位图背景与位图画刷》主要介绍了通过WM_CTLCOLORDLG消息来设置对话框的背景,在Windows系统中还有类似于WM_CTLCOLORDLG消息的还有WM_CTLCOLORBTN,WM_CTLCOLOREDIT,WM_CTLCOLORLISTBOX,WM_CTLCOLORSCROLLBAR,WM_CTLCOLORSTATIC这五种来分别管理按钮,编辑框,列表框,滚动条,静态框。有兴趣的读者可以试验下。

        

首页 上一页 2 3 4 5 6 7 8 下一页 尾页 5/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Windows界面编程:半透明窗体 下一篇C语言中表驱动编程(动态加载)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: