今天决定写个模仿金山霸界面的VC程序,但是不知道怎样给对话框添加背景图片。于是上网找了些资料,现在学一点总结一点,最后再把各种方法在实践中的“表现”都理出来。
方法一:
1,给对话框添加成员变量 CBrush m_Brush;
2,在对话框的构造函数中添加
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1); // IDB_BITMAP1为BITMAP资源ID,可以指定bitmap图片的路径
m_Brush.CreatePatternBrush(&bm);
3,添加 WM_CTLCOLOR 消息处理函数,把 return hbr; 改为 return m_Brush;
总结:我把成员变量放在 “仿毒霸界面Dlg.h” 这个头文件中,把IDB_BITMAP1改为自已资源中的图片ID。然后背景添加成功!但是不理想,问题有:图片只在客户区显示,各控件不透明使正是界面看起来很乱很脏。
又看了好几个例子后发现显示图片需要知道三点:
1,获得欲进行绘图的设备环境句柄(即CDC的子类DC);
2,定义图形对像(GDI中的CBitmap);
3,获得绘图的范围(CRect);
例如显示一张资源中的bmp位图:
CDC bdc; //定义环境变量对像
CBitmap bipmap; //定义图形对像
CRect rect; //定义用于存储绘图范围的变量
bdc.CreateCompatibleDC(&dc); //dc是欲进行绘图的环境变量,比如OnPaint消息中的CPaintDC dc(this);在不同函数中可用获得dc的函数得到dc值。该函数的做用是将bdc申请为一个dc模式的内存空间,以用来存放位图。
bitmap.LoadBitmap(IDB_BUTTON1); //IDB_BUTTON1是资源中位图的ID,该函数作用是把位图加载到图形设备对像中。
bdc.SelectObject(bitmap); //这一步是把位图放入内存空间。
dc.BitBlt(0,0.rect.right,rect.button,&bdc,0,0,SRCCOPY); //该函数是dc用成员函数BitBlt将bdc中的位图显示到屏幕上。