自绘窗体有关问题
自绘窗体问题
1)为什么鼠标左键一直按住对话框标题栏不放会出现边框出现一条线,如图:

2)为什么我的窗口拉大后,增加部分无法显示而拉小窗口就没事,如图:


------解决思路----------------------
先告诉你当你扩大窗口时windows干了什么:
windows标记了窗口中原始部分仍然有效,但是比原始部分大的窗口区域无效,即invalidate region是新窗口rect减去源窗口rect,然后发现窗口有无效区域,给窗口发送了WM_PAINT,窗口接收到WM_PAINT进入你的wndproc程序,根据你的判断条件,调用了
_DrawMainDlg();
M_DrawSystemButton();
(先不去管这部分是否会又设置了窗口无效区域)
然后你调用了原来的wndproc,原来的wndproc处理WM_PAINT时调用了BeginPaint(), 在BeginPaint()中系统会SendMessage发送WM_NCPAINT,又一次进入该窗口的wndproc,你又调用了_DrawMainDlg(); M_DrawSystemButton();画了一遍再交给原来的wndproc处理这个WM_NCPAINT。当WM_NCPAINT返回后,BeginPaint()继续发送WM_ERASEBKGND(), 再次进入你的wndproc,幸亏或不幸这次你没有再重画,直接交给原来的wndproc处理,原来的wndproc调用画刷充填了背景,虽然只影响wm_paint时系统指出的无效部分--啊哦,看来把你新画的边框给清了--很明显你画边框时仍然使用了老的窗口大小所以这部分边框画到client区域了。然后BeginPaint()返回,WM_PAINT消息处理继续调用了OnPaint()画client部分。
从上面的过程可以发现问题就出在你的_DrawMainDlg()或M_DrawSystemButton()中,即使这两个函数你一个都没贴。
1)为什么鼠标左键一直按住对话框标题栏不放会出现边框出现一条线,如图:
2)为什么我的窗口拉大后,增加部分无法显示而拉小窗口就没事,如图:
------解决思路----------------------
先告诉你当你扩大窗口时windows干了什么:
windows标记了窗口中原始部分仍然有效,但是比原始部分大的窗口区域无效,即invalidate region是新窗口rect减去源窗口rect,然后发现窗口有无效区域,给窗口发送了WM_PAINT,窗口接收到WM_PAINT进入你的wndproc程序,根据你的判断条件,调用了
_DrawMainDlg();
M_DrawSystemButton();
(先不去管这部分是否会又设置了窗口无效区域)
然后你调用了原来的wndproc,原来的wndproc处理WM_PAINT时调用了BeginPaint(), 在BeginPaint()中系统会SendMessage发送WM_NCPAINT,又一次进入该窗口的wndproc,你又调用了_DrawMainDlg(); M_DrawSystemButton();画了一遍再交给原来的wndproc处理这个WM_NCPAINT。当WM_NCPAINT返回后,BeginPaint()继续发送WM_ERASEBKGND(), 再次进入你的wndproc,幸亏或不幸这次你没有再重画,直接交给原来的wndproc处理,原来的wndproc调用画刷充填了背景,虽然只影响wm_paint时系统指出的无效部分--啊哦,看来把你新画的边框给清了--很明显你画边框时仍然使用了老的窗口大小所以这部分边框画到client区域了。然后BeginPaint()返回,WM_PAINT消息处理继续调用了OnPaint()画client部分。
从上面的过程可以发现问题就出在你的_DrawMainDlg()或M_DrawSystemButton()中,即使这两个函数你一个都没贴。