请教控件重绘的问题,

wateryh 2011-11-17 11:43:49
在一个cdialog中,下图中的1,2,3,是什么,标题栏,客户区??
可以在那些事件中重新绘制


中间的客户区知道了,在 ON_PAINT中,
其他的呢,
麻烦哪位老大,指点下
...全文
67 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
VC天下 2011-11-17
  • 打赏
  • 举报
回复
蓝色部分是属于非客户区。响应这个消息:ON_WM_NCPAINT
参考:http://hi.baidu.com/xhb624/blog/item/766c32dc8a771fdf8c1029e2.html
shen_wei 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 beyondhaven 的回复:]
蓝色部分是属于非客户区。响应这个消息:ON_WM_NCPAINT
参考:http://hi.baidu.com/xhb624/blog/item/766c32dc8a771fdf8c1029e2.html
[/Quote]
就这样,比较麻烦。。

推荐使用皮肤库。。自己网上找找很多的!!
hnzlk 2011-11-17
  • 打赏
  • 举报
回复
重绘非客户区比较麻烦,一般都直接去掉,然后自己再贴一个上去。
如果要做得很标准的话,要考虑的东西比较多,比如失去焦点后,最大化后,还原等等。
allen_lanyuhai 2011-11-17
  • 打赏
  • 举报
回复
1.这个是标题栏,属于非客户区的..可以自己定义一个函数去绘制这个标题栏..标题栏可以和2(边框)一起放在一个函数里面绘制...
2.这个是边框..
第1和第2可以放在同一个函数里面去绘制..
可以自己在对话框类中添加函数void OnDrawTitle(CDC *pDC);
然后重载WindowProc这个消息处理函数去处理WM_MOVE WM_PAINT WM_NCPAINT WM_NOTIFY WM_NCACTIVATE这五个消息...具体代码如下:
LRESULT 类名::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lResult=CDialog::WindowProc(message, wParam, lParam);
if(!IsWindow(m_hWnd))
return lResult;
if(message == WM_MOVE || message == WM_PAINT || WM_NCPAINT || WM_NOTIFY || WM_NCACTIVATE)
{
CDC *pWndDC=GetWindowDC();
if(pWndDC)
{
OnDrawTitle(pWnd);
}
ReleaseDC(pWndDC);
}
return lResult;
}
void 类名::OnDrawTitle(CDC *pDC)
{
在这里面绘制标题栏和边框;
.....................
.....................
}

15,978

社区成员

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

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