您的位置:首页 > 大数据 > 人工智能

处理WM_NCPAINT消息

2014-01-03 18:12 211 查看
处理WM_NCPAINT消息可以实现自绘窗口边框和标题栏。

手头有个窗口需要自绘边框,于是处理了WM_NCPAINT消息,结果程序初运行时可以正常绘制,一旦最小化或者调整窗口位置后就看不到自绘的边框了。找了半天发现犯了个愚蠢的错误。在获取窗口矩形后未做处理便开始了绘图操作,现在加上平移操作,使要绘制的矩形左上角坐标归零后一切正常。

窗口包含WS_BORDER和WS_THICKFRAME风格,边框大小一般为4。

代码如下:

[csharp] view
plaincopy





if( uMsg == WM_NCPAINT )

{

HDC hdc;

hdc = GetWindowDC(hWnd);

// Paint into this DC

RECT rcWin;

GetWindowRect(hWnd, &rcWin);

OffsetRect( &rcWin, -rcWin.left, -rcWin.top );

for(int i=0; i<4; i++)

{

FrameRect(hdc, &rcWin, m_hbr[i]);

InflateRect(&rcWin, -1, -1);

}

ReleaseDC(hWnd, hdc);

return 0;

}

其中m_hbr是HBRUSH类型的数组,含4个元素,用CreateSolidBrush函数做了初始化。处理完WM_NCPAINT消息后返回0,阻止系统调用DefWindowProc继续处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: