WM_NCPAINT消息处理的一点问题。

yiruirui0507 2011-02-24 10:47:42
我想在窗口的非客户区画一个矩形(颜色随便,不冲突就行),写的代码如下:
case WM_NCPAINT:
{
HDC hdc;
hdc=GetWindowDC(hwnd);
RECT rect;
HBRUSH hBrush=CreateSolidBrush(RGB(0,255,255));
hBrush=(HBRUSH)SelectObject(hdc,hBrush);
rect.left=50;
rect.top=5;
rect.right=70;
rect.bottom=15;
FillRect(hdc,&rect,hBrush);
DeleteObject(SelectObject(hdc,hBrush));
ReleaseDC(hwnd,hdc);
}
return 0;

case WM_DESTROY :
。。。。。。。。。。。。。
为何没有达到想要的效果,并且移动窗口发生重绘的时候,窗口会变的乱七八槽的,哪里出了问题?
WM_paint wm_ncpaint消息我都处理了,RT,请分析分析原因。
...全文
340 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiruirui0507 2011-02-26
  • 打赏
  • 举报
回复
路走错了,想在窗口的非客户区中的某个位置画一个按钮不仅仅是能在WM_NCPAINT消息中绘制,更可以在WM_PAINT中绘制,核心在于获取的是跟哪个窗口相关的设备内容(DC)。
再者刚开始纠结的为何去不掉标题栏,是因为老大里面说了( MSDN)
CW_USEDEFAULT is valid only for overlapped windows; if CW_USEDEFAULT is specified for a pop-up or child window, nWidth and nHeight are set to zero.
overlapped windows---层叠窗口。

yiruirui0507 2011-02-24
  • 打赏
  • 举报
回复
我不想重新绘制人家非客户区,只是想在上面加个按钮,其他操作我都不需要的。
因此我才想到在WM_NCPAINT消息中就能够实现。
客户区大小发生变化,会产生WM_PAINT消息。
非客户区应该也会由系统帮我们自己处理WM_NCPAINT消息吧。
自己写了个为何就没实现此功能,求分析。,,
TandyT 2011-02-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
http://daixinghe.blog.163.com/blog/static/184361592008113193138744/
[/Quote]

移动了窗口后可能需要重画,楼上这个关于自绘的内容值得参考!
yiruirui0507 2011-02-24
  • 打赏
  • 举报
回复
第一步实现的功能是去掉标题栏:
经过几经周折终于去掉了,用的是createwindowex 风格是WS_POPUP,扩展风格0。
用CREATEWINDOW+WS_POPUP却去不掉,有知道WHY的嘛?
不晓得大家用什么法子去除标题栏?
yiruirui0507 2011-02-24
  • 打赏
  • 举报
回复
我去动手试试:重绘整个非客户区,包括边框,最大化最小化还原按钮,标题栏等等。
看样子工作量好大哦。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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