码迷,mamicode.com
首页 > 其他好文 > 详细

位图背景与位图画刷

时间:2015-10-15 09:58:54      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

  通过WM_CTLCOLORDLG消息设置对话框的背景,当窗口过程接收消息时,wParam表示对话框的设备上下文,即HDC,lParam表示对话框的句柄。

  思路:在WM_CTLCOLORDLG消息中获得对话框的大小,通过StretchBlt将位图贴到对话框的HDC中,完成对画框的背景设置,最后返回一个空画刷给系统。

  注意:使用StretchBlt缩放位图时,先使用SetStretchBltMode设置内容伸展模式,避免缩放后ude位图失真。

  函数:

int SetStretchBltMode (
    HDC  hdc;             //handle to DC
    int  iStretchMode;    //bitmap stretching mode
);

  iStretchMode参数:

  1.BLACKONWHITE or STRETCH_ANDSCANS

  如果两个或多个像素要合并成一个像素,那么StretchBlt会对像素执行逻辑AND运算。结果是只有全部像素都是白色时该像素才是白色。适用于白色背景中主要是黑色的单色点阵图。

  2.WHITEONBLACK or STRETCH_ORSCANS

  如果两个或多个像素要合并成一个像素,那么StretchBlt会对像素执行逻辑or运算。结果是只有全部像素都是黑色时该像素才是黑色。适用于黑色背景中主要是白色的单色点阵图。

  3.COLORONCOLOR or STRETCH_DELETESCANS

  简单地消除像素行或列,通常是处理彩色点阵图的最佳方法。

  4.HALTONE or STRETCH_HALFTONE

  根据组合起来的来源颜色计算目的的平均色。

完整代码:

 1 //main.cpp
 2 #include <windows.h>
 3 #include <tchar.h>
 4 #include "resource.h"
 5 
 6 BOOL CALLBACK DlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam);
 7 
 8 int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
 9 {
10             DialogBox(hInstance,MAKEINTRESOURCE(DLG_MAIN),NULL,DlgProc);
11 return 0;
12 }
13 
14 BOOL CALLBACK DlgProc(HWND hwndDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
15 {
16     RECT    rcDialog;
17     HBITMAP    hBitmap;
18     static    BITMAP    bm;
19     static    HDC    sthDC;
20 
21     switch(uMsg)
22 {
23     case WM_INITDIALOG:
24        hBitmap=(HBITMAP)LoadImage(NULL,_T("bg.bmp"),IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
25        HDC hdc;
26        hdc=GetDC(hwndDlg);
27        bm=CreateCompatibleDC(hdc);
28     SelectObject(bm,hBitmap);
29     ReleaseDC(hDlg,hdc);
30     GetObject(hBitmap,sizeof(bm),&bm);
31       return TRUE;
    case WM_CTLCOLORDLG:
      GetClientRect(hwndDlg,&rcDialog);
      SetStretchBltMode((HDC)wParam,COLORONCOLOR);
      StretchBlt((HDC)wParam,0,0,,rcDialog.right,rcDialog.bottom,sthDC,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
      return (BOOL)((HBRUSH)GetStockObject(NULL_BRUSH));
32 }

 

位图背景与位图画刷

标签:

原文地址:http://www.cnblogs.com/TnaHades/p/4881353.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!