我们经常在使用应用时候,应用都会检测窗口焦点并进行消息处理,比如VS2019的边框:
那么,这些消息一般都是在WM_ACTIVATE:里面实现的
不用多说,先直接
case WM_ACTIVATE:
//code
随后,找到自己代码的这一片段
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
加入后如下
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{BOOL fActive;
}
现在,大家应该认为是用,用if…来处理消息了吧
对,就是这样!
我们在WM_ACTIVATE里面加入如下
fActive = LOWORD(wParam);
最终形成如下代码
case WM_ACTIVATE:RECT rc;fActive = LOWORD(wParam);hdc = GetDC(hwnd);GetClientRect(hwnd, &rc);rc.bottom = 28;if (fActive == WA_ACTIVE){HBRUSH hbr = NULL;HPEN hpen = NULL;hpen = CreatePen(PS_SOLID, 4, RGB(20, 20, 20));SelectObject(hdc, hpen);SelectObject(hdc, (HBRUSH)GetStockObject(NULL_BRUSH));RoundRect(hdc, 0, 0, 400, 300, 6, 6);ReleaseDC(hwnd, hdc);//Over }else{HBRUSH hbr = NULL;HPEN hpen = NULL;//hpen = CreatePen(PS_SOLID, 4, RGB(0, 122, 204));hpen = CreatePen(PS_SOLID, 4, RGB(53, 56, 68));SelectObject(hdc, hpen);SelectObject(hdc, (HBRUSH)GetStockObject(NULL_BRUSH));RoundRect(hdc, 0, 0, 400, 300, 6, 6);ReleaseDC(hwnd, hdc);//Over }break;}return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
这样,就实现类似效果了.
VS2019编译通过,非MFC代码.
这只是一篇随笔,如果您有更好的办法,欢迎留言.