【问题标题】:Problem loading taskbar icon for dialog加载对话框的任务栏图标时出现问题
【发布时间】:2011-05-31 13:14:18
【问题描述】:

我在显示我的应用创建的对话框的任务栏图标时遇到了一点问题。主应用程序是基于系统托盘的 Windows 应用程序。

这是我用来创建对话框的代码:

        g_pMainWnd->m_DlgAuth= new CDlg_Auth();
        g_pMainWnd->m_DlgAuth->SetTitle(_T("Authentication"));          
        g_pMainWnd->m_DlgAuth->SetSize(420,420);
        g_pMainWnd->m_DlgAuth->Create(IDD_DLG_AUTH,AfxGetMainWnd());
        g_pMainWnd->m_DlgAuth->ShowWindow(SW_SHOW);
        g_pMainWnd->m_DlgAuth->SetForegroundWindow();

g_pMainWnd 是指向主类的全局指针,因为对话框的创建是在子线程的回调中进行的。

任务栏图标是在 MFC 的 OnInitDialog 方法中创建的,如下所示:

    m_hIcon = (HICON)LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME),IMAGE_ICON, 0, 0, 0); 

    int cxIcon = GetSystemMetrics(SM_CXSMICON);
    int cyIcon = GetSystemMetrics(SM_CYSMICON);

    m_hIconSmall = (HICON)LoadImage(AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME),IMAGE_ICON
        ,cxIcon,cyIcon, 0); 

    SetIcon(m_hIconSmall, FALSE);       // Set small icon
    SetIcon(m_hIcon, TRUE);     // Set small icon

小图标加载完美,问题在于大图标,它根本不加载,手柄已设置并且一切看起来都很好,但是当任务栏按钮显示时,它显示了默认的 Windows 控制台应用程序图标。

我已经在这里待了一周,但似乎没有任何效果。我尝试过其他 32x32 图标,尝试从不同的线程加载对话框。我试图让回调向主线程发布一条消息以创建对话框。对话框中的所有控件都可以正常工作。它会获取所有必要的消息,但不会绘制图标。

将不胜感激任何可能的帮助。 谢谢

【问题讨论】:

  • 一般情况下,MFC 框架会选择第一个图标。如果您首先选择其他图标/资源,MFC 将无法加载图标
  • 感谢您的评论。我已经解决了这个问题并将答案发布到这个线程。问题不是来自资源/图像,而是谢谢。

标签: mfc visual-c++


【解决方案1】:

只是通过使用向主窗口发送 WM_SETICON 消息而不是调用 seticon 函数来修复它

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多