You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在VC++中检测MFC对话框处于最大化还是最小化状态?

检测MFC对话框的最大化/最小化状态

要判断VC++中MFC对话框处于最大化还是最小化状态,最常用的方式是通过**OnSize消息处理函数**——对话框的尺寸变化(包括最大化、最小化、还原)都会触发这个消息。下面给你两种可行的实现方式:

方式一:利用窗口样式判断(对应你提供的代码优化版)

你原来的思路是通过获取窗口样式位来判断,这里修正了代码里的小问题(比如未给title赋值的疏漏),并优化了调用方式:

void OnSize(UINT nType, int cx, int cy) { 
    CDialog::OnSize(nType, cx, cy); 

    CString title;
    // 直接调用对话框类的成员函数GetWindowText,比全局API更简洁
    GetWindowText(title); 

    if(title.Find(_T("ABC")) != -1){ 
        // 获取当前对话框的窗口样式
        DWORD style = GetStyle(); 
        if (style & WS_MAXIMIZE) {
            MessageBox(_T("Dialog Maximized")); 
        } else if (style & WS_MINIMIZE) {
            MessageBox(_T("Dialog Minimized")); 
        }
    } 
}

方式二:直接使用OnSizenType参数(更高效推荐)

其实OnSize函数的第一个参数nType已经直接传递了窗口的状态,不需要额外获取样式,这种方式更高效直观:

void OnSize(UINT nType, int cx, int cy) {
    CDialog::OnSize(nType, cx, cy);

    CString title;
    GetWindowText(title);
    if (title.Find(_T("ABC")) != -1) {
        switch(nType) {
            case SIZE_MAXIMIZED:
                MessageBox(_T("Dialog Maximized"));
                break;
            case SIZE_MINIMIZED:
                MessageBox(_T("Dialog Minimized"));
                break;
            case SIZE_RESTORED:
                // 对话框从最大化/最小化还原到正常尺寸时触发,可按需添加处理
                MessageBox(_T("Dialog Restored"));
                break;
        }
    }
}

小提示

  • 记得用_T()宏包裹字符串,确保代码在ANSI和Unicode字符集下都能正常编译。
  • 如果你只需要针对当前对话框做判断,其实可以跳过标题检查的步骤,直接处理状态即可。

内容的提问来源于stack exchange,提问作者kundan kumar

火山引擎 最新活动