当前位置: 代码迷 >> 综合 >> C++(Win32API)检测窗体的激活(焦点,和失去焦点)状态,并执行对应消息处理
  详细解决方案

C++(Win32API)检测窗体的激活(焦点,和失去焦点)状态,并执行对应消息处理

热度:18   发布时间:2024-01-31 06:10:05.0

我们经常在使用应用时候,应用都会检测窗口焦点并进行消息处理,比如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代码.
这只是一篇随笔,如果您有更好的办法,欢迎留言.