2010-10-27 4 views
3

У меня есть приложение win32, которое использует DialogBox() для отображения своего главного окна.win32 Приложение DialogBox: как сделать диалоговое окно скрытым при запуске?

Теперь я хочу, чтобы начать это приложение с диалоговым окном невидимым, а затем установить его видимым с SetWindowPos (hDlg, HWND_TOPMOST ...

К сожалению

http://msdn.microsoft.com/en-us/library/ms645452(VS.85).aspx

Функция отображает диалоговое окно (независимо от того, задает ли шаблон стиль WS_VISIBLE)

... кажется, что это невозможно сделать с помощью DialogBox().

Я мог бы добавить вызов SetWindowPos (hDlg, HWND_NOTOPMOST ...

в моей диалоговой процедуре в обработчике WM_INITDIALOG.

... но я обеспокоен тем, что при тяжелой системе погрузки диалоговое окно на короткое время появится затем исчезают, давая уродливый фликкер эффект.

есть ли способ создания моего диалогового окна с помощью DialogBox(), не показывая его?

+0

Не могли бы вы обойти DialogBox и просто использовать CreateWindowEx и т.д.? – YWE

+0

@YWE: Я не уверен. MSDN говорит, что DialogBox() использует CreateWindowEx() внутренне, поэтому это должно быть возможно. Моя процедура диалога ожидает сообщений типа WM_INITDIALOG и делает диалоговые вызовы, такие как SendDlgItemMessage(): не уверен, все ли это будет работать, если я использую CreateWindowEx(). –

+0

У меня проблемы. Если вы не хотите показывать диалог, просто не вызывайте ShowDialog(). Направьте свой собственный цикл сообщений, если это необходимо. –

ответ

0

Я имел некоторый успех с этой техникой

void CMyDlg::OnWindowPosChanging(WINDOWPOS* lpWndPos) 
{ 
    // hide dialog 
    lpWndPos->flags &= ~SWP_SHOWWINDOW; 
    CDialog::OnWindowPosChanging(lpWndPos); 
} 

от here

Смежные вопросы