设为首页 加入收藏

TOP

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

 

  其它技术细节可以见代码中的注释,完整代码如下(也可以下载下载地址为:http://download.csdn.net/download/morewindows/4947377):

  双击代码全选

  // 对话框位图背景 - WM_CTLCOLORDLG中使用StretchBlt贴图

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

  #include

  #include "resource.h"

  const char szDlgTitle[] = "位图背景 使用StretchBlt贴图 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)

  {

  RECT rcDialog;

  HBITMAP hBitmap;

  static BITMAP s_bm;

  static HDC s_hdcMem;

  switch (message)

  {

  case WM_INITDIALOG:

  // 设置对话框标题

  SetWindowText(hDlg, szDlgTitle);

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

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

  // 加载背影图片

  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);

  }

  else

  {

  // 将背影图片放入HDC - s_hdcMem

  HDC hdc;

  hdc = GetDC(hDlg);

  s_hdcMem = CreateCompatibleDC(hdc);

  SelectObject(s_hdcMem, hBitmap);

  ReleaseDC(hDlg, hdc);

  // 得到位图信息

  GetObject(hBitmap, sizeof(s_bm), &s_bm);

  }

  return 0;

  case WM_COMMAND:

  switch (LOWORD(wParam))

  {

  case IDCANCEL:

  DeleteDC(s_hdcMem);

  EndDialog(hDlg, LOWORD(wParam));

  return TRUE;

  }

  break;

  case WM_SIZE:

  InvalidateRect(hDlg, NULL, TRUE);

  return TRUE;

  case WM_CTLCOLORDLG:

  GetClientRect(hDlg, &rcDialog);

  //通过SetStretchBltMode的设置能使StretchBlt在缩放图像更加清晰

  SetStretchBltMode((HDC)wParam, COLORONCOLOR);

  StretchBlt((HDC)wParam, 0, 0, rcDialog.right, rcDialog.bottom, s_hdcMem, 0, 0, s_bm.bmWidth, s_bm.bmHeight, SRCCOPY);

  return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));

  }

  return FALSE;

  }

  运行结果如下:

  在上面这种方法中,我们是在WM_CTLCOLORDLG中贴图来完成背景设置了,也可以创建一个位图画刷,然后在WM_CTLCOLORDLG消息中直接返回这个画刷,这样系统将完成贴图功能。

        

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

评论

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