Редактировать # 2:
Чтобы установить значок для этого окна (по сути, заставки), вы можете отправить окну сообщение WM_SETICON
вместе с нужным значком.
Для диалога вы можете сделать это в OnInitDialog()
.Вот фрагмент, который использует значок информации о окнах по умолчанию, как указано здесь: LoadIcon @ MSDN .
// CHelperDlg message handlers
BOOL CHelperDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 32516 is also known as IDI_INFORMATION
HICON hIcon = LoadIcon(0, MAKEINTRESOURCE(32516));
// 0 in WPARAM is 'small version'
::SendMessage(GetSafeHwnd(), WM_SETICON, 0, (LPARAM)hIcon);
// 1 in WPARAM is 'large version'
::SendMessage(GetSafeHwnd(), WM_SETICON, 1, (LPARAM)hIcon);
// No cleanup as HICONs are free from disposal rules.
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
-
Редактировать:
Я создал второй проект для имитации вашего обновления, но не вижу никаких отличий, кроме включения DS_SHELLFONT (DS_SETFONT | DS_FIXEDSYS) в мой файл .rc.Эти определения стиля диалога не влияют на отображение диалога.
Я загрузил ключевые части для моего минимального примера в http://gist.github.com/461057 для справки, на случай, если вы захотите добавитьэтот диалог впереди вашего для тестирования.
Также я использую VS2010.У меня есть VS2008, если вы хотите, чтобы я повторил этот тест и в этой версии.
-
Оригинал:
Попробуйте указать окно рабочего стола(через CWnd::GetDesktopWindow()
) в качестве родительского окна при создании диалога.
// Member Variable
CHelperDlg *dlg;
// Meanwhile, elsewhere...
dlg = new CHelperDlg();
dlg->Create(IDD_HELPERDLG, CWnd::GetDesktopWindow());
dlg->ShowWindow(SW_SHOW);
// or...
// dlg->DoModal();
Кроме того, не забудьте уничтожить диалоговое окно, когда вы закончите с ним, либо в деструкторе классавладелец или другое удобное расположение.