Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Спрятать окно при загрузке


Автор: Ander 2.9.2004, 15:26
Если есть такой код
Код

INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
              LPSTR lpCmdLine, int nCmdShow)
{
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,reinterpret_cast<DLGPROC>(DialogProcedure));
return FALSE;
}

и соответственно главное окно - диалог. Мне надо, чтобы оно обязательно было из ресурса и при запуске не отображалось вообще.
Мда, в Апях я не силён.

Автор: trix 2.9.2004, 16:01
сделай его ширину и высоту по нулям.

Автор: Ander 2.9.2004, 16:22
Вариант конечно хороший, но в таск баре окошко всё равно остаётся. Есть ли такое событие, которое отсылается окну сразу после отрисовки? Тогда можно туда кинуть ::ShowWindow(hWnd,SW_Hide) и все дела.

Автор: _hunter 2.9.2004, 16:39
есть такое сообщение:
WM_CREATE

Автор: Ander 2.9.2004, 17:08
_hunter
Ничего не получается, да и вообще:
Цитата

WM_CREATE
...
The window procedure of the new window receives this message after the window is created, but before the window becomes visible.

Автор: _hunter 2.9.2004, 17:15
а ты это:
Цитата
DialogBox does not return control until the specified callback function terminates the modal dialog box by calling the EndDialog function.

читал?

соответственно нужно было копать в сторону DialogProc
и там видим:
Цитата
The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed.


поиск, поиск и еще раз поиск smile.gif

Автор: Ander 2.9.2004, 17:28
_hunter
Я наверное сегодня торможу, но объясни мне что куда ставить, чтобы окно не было видно при загрузке.

Цитата

The WM_INITDIALOG message is sent to the dialog box procedure immediately before a dialog box is displayed.


before же, а не after

Автор: _hunter 2.9.2004, 17:35
и что мешает установить before a dialog box is displayed WS_VISIBLE ( с помощью SetWindowLong() и GWL_STYLE )?

Автор: AndyY 3.9.2004, 16:39
предлагаю сделать диалог немодальным
тогда он не будет становиться видимым по умолчанию:

WinMain( ... )
{
HWND hwnd = CreateDialog( ... );

MSG msg;
while( GetMessage( &msg ) )
{
IsDialogMessage( &msg, ... );
}
}

Автор: Ander 5.9.2004, 01:22
AndyY
Блин, всё оказалось так просто. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)