非MFC对话框,修改对话框背景图片?

青芒Only 2018-02-18 11:36:11
windows C++ 开发的二次开发平台的对话框,没有OnPaint函数,只能通过WindowResize的回调函数,通过FindWindow的方式获取到HWND进行处理,自身的Dialog类也没有提供修改对话框背景图片的方法。

void TestCmd::OnTestCmdWindSizeNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data)
{
HWND hwnd;
hwnd = FindWindow(NULL, L"TestCmd");
if(0 != hwnd)
{
CWnd *pWnd =CWnd::FromHandle(hwnd);
CBitmap * m_bitmap= new CBitmap();
CString FilePathName = "C:\\1.bmp";
HBITMAP hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePathName,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if(!m_bitmap->Attach(hBitmap))
{
cout<<"导入图片失败"<<endl;
return;
}

CPaintDC dc(pWnd);
CDC *pDC = &dc;
CRect rect;
GetClientRect(hwnd,&rect);
CDC dcMem;
dcMem.CreateCompatibleDC(&dc);

BITMAP bitmap;
m_bitmap->GetBitmap(&bitmap);
CBitmap*pbmpOld=dcMem.SelectObject(m_bitmap);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0, bitmap.bmWidth-1,bitmap.bmHeight-1,SRCCOPY);
}
}

可以实现修改背景图片,但是必须手动修改对话框大小才能刷新,感觉就是WM_PAINT进入了消息队列但是并没有触发,下次手动修改触发了消息。试过添加Invalidate和UpdateWindow ,但是不行,GDI这块不是很懂,请教各位一下。
...全文
582 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
青芒Only 2018-02-22
  • 打赏
  • 举报
回复
谢谢两位,OldProc = SetWindowLongPtr(hwnd, GWLP_WNDPROC, (INT_PTR)WndProc);
Eleven 2018-02-21
  • 打赏
  • 举报
回复
SetWindowLong(GWL_WNDPROC, ...);
zgl7903 2018-02-19
  • 打赏
  • 举报
回复
如果有源码 添加 WM_ERASEBKGND 或者 WM_PAINT 消息处理, 如果没有 可以 SetWindowLongPtr GWL_WNDPROC 替换原来的WindowProc
schlafenhamster 2018-02-19
  • 打赏
  • 举报
回复
对话框,没有OnPaint函数 ? 应该是 WM_PAINT 吧

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧