在网上看到了这样的代码: CBitmap m_bmpBackground; m_bmpBackground.LoadBitmap(IDB_BITMAPBACKGROUND); CPaintDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
BITMAP bitMap;
m_bmpBackground.GetBitmap(&bitMap);
CBitmap *pbmpOld=dcMem.SelectObject(&m_bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);我试了一下,发现是将背景图片放到了client上的,并不能将对话框的标题栏也覆盖掉,要是想用一个图片将标题栏和客户区都覆盖,应该如何是好?谢谢!
CRect rect;
GetClientRect(&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
BITMAP bitMap;
m_bmpBackground.GetBitmap(&bitMap);
CBitmap *pbmpOld=dcMem.SelectObject(&m_bmpBackground);
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY);我试了一下,发现是将背景图片放到了client上的,并不能将对话框的标题栏也覆盖掉,要是想用一个图片将标题栏和客户区都覆盖,应该如何是好?谢谢!
没有标题、没有边框的窗口,ClientRect和WindowRect是一致的
使用向导添加 WM_NCPAINT 消息
使用 GetWindowDC 直接获取整个窗口的DC
使用该DC进行绘制就行了另外说一句,当系统消息来的时候,会还原系统部分的绘制
你可以要处理一大堆的NC消息才能好一点..
void CcaptionbarDlg::OnNcPaint()
{
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CDialog::OnNcPaint()
CDC *pdc = GetWindowDC();
CDC memdc;
memdc.CreateCompatibleDC(pdc);
memdc.SelectObject(m_bit);
pdc->BitBlt(0,0,m_bm.bmWidth,m_bm.bmHeight,&memdc,0,0,SRCCOPY);
ReleaseDC(pdc);
}
那个对话框加图片,在网上有的,早不久见过
1.在对话框属性里面把标题栏前面的钩去掉,这样就没有标题栏了,
2.对话框设计界面里把边上的虚线拉到和对话框一样大
3.设定对话框属性里面的边框样式,初始为"对话框架",改为无就没有了.
4.在对话框上增加按钮1,2.增加点击消息分别用于响应对话框最小化(ShowWindow(SW_MINIMIZE))和关闭消息
5.给对话框添加WM_LBUTTONDOWN消息,写入
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y)); CDialog::OnLButtonDown(nFlags, point);
这样当你在对话框的任意位置点下左键,都可以拖动对话框
应该换是GetWindowRect(&rect);才可以吧。客户区域是不包括标题栏的。
message==WM_PAINT||
message==WM_NCPAINT||
message==WM_NCACTIVATE||
message == WM_NOTIFY
在DefWindowProc处理这些消息,再调用绘图。