Сделать диалог главным окном
От: vvQuad Россия  
Дата: 04.01.06 11:33
Оценка:
Спасибо
Отредактировано 01.01.2024 18:21 Username . Предыдущая версия .
Re: Сделать диалог главным окном
От: Чили Россия  
Дата: 04.01.06 11:39
Оценка:
Здравствуйте, vvQuad, Вы писали:

Q>Надо сделать диалоговое окно главным окном при помощи средств API. Как это реализовать? Диалоговое окно будет создаваться редактором ресурсов. Заранее спасибо!


int WINAPI WinMain(...)
{
return DialogBox(...);
}
Re[2]: Сделать диалог главным окном
От: vvQuad Россия  
Дата: 07.01.06 00:59
Оценка:
Спасибо
Отредактировано 01.01.2024 18:23 Username . Предыдущая версия .
Re[3]: Сделать диалог главным окном
От: Slava Antonov Россия http://deadbeef.narod.ru
Дата: 07.01.06 04:17
Оценка:
Hello vvQuad, you wrote:

> while(GetMessage(&msg, NULL, 0, 0))

> {
> TranslateMessage(&msg);
> DispatchMessage(&msg);
> }
> return DialogBox(hInst,MAKEINTRESOURCE(IDD_MAIN),hWnd,DLGMAIN);
> Программа запускается, но никакого окна не открывается.

Потому что крутится цикл выборки сообщений. И до последней строчки управление просто не доходит.

--
Всего хорошего, Слава
ICQ: 197577902
Posted via RSDN NNTP Server 2.0
Re: Сделать диалог главным окном
От: said222  
Дата: 08.01.06 16:28
Оценка:
Здравствуйте, vvQuad, Вы писали:

Q>Надо сделать диалоговое окно главным окном при помощи средств API. Как это реализовать? Диалоговое окно будет создаваться редактором ресурсов. Заранее спасибо!


Регистрировать класс окна не нужно, окно создавать не нужно, цикл сообщений не нужен. Просто нужно вызвать DialogBox(...) и все. И естественно Функцию обработки сообщений диалога.
Re[3]: Сделать диалог главным окном
От: Sitr Россия  
Дата: 09.01.06 04:30
Оценка:
Здравствуйте, vvQuad, Вы писали:

Q>Здравствуйте, Чили, Вы писали:


Ч>>int WINAPI WinMain(...)

Ч>>{
Ч>> return DialogBox(...);
Ч>>}

Q>Попробовал. Не получилось. Выкладываю код:


Q>int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

Q>{
Q> static char szAppName[]="СУБД 'Преподаватели'";
Q> HWND hWnd;
Q> MSG msg;
Q> WNDCLASSEX wndClass;
Q> INITCOMMONCONTROLSEX icc;

Q> wndClass.cbSize =sizeof(wndClass);

Q> wndClass.style =CS_HREDRAW|CS_VREDRAW;
Q> wndClass.lpfnWndProc =WndProc;
Q> wndClass.cbClsExtra =0;
Q> wndClass.cbWndExtra =0;
Q> wndClass.hInstance =hInstance;
Q> wndClass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
Q> wndClass.hCursor =LoadCursor(NULL,IDC_ARROW);
Q> wndClass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH);
Q> wndClass.lpszMenuName =MAKEINTRESOURCE(MAIN_MENU);
Q> wndClass.lpszClassName =szAppName;
Q> wndClass.hIconSm =LoadIcon(NULL,IDI_APPLICATION);
Q> RegisterClassEx(&wndClass);
Q> icc.dwSize = sizeof(INITCOMMONCONTROLSEX);
Q> icc.dwICC = ICC_DATE_CLASSES;
Q> InitCommonControlsEx(&icc);
Q> hWnd = CreateWindow(szAppName,"СУБД",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);

Q> while(GetMessage(&msg, NULL, 0, 0))

Q> {
Q> TranslateMessage(&msg);
Q> DispatchMessage(&msg);
Q> }

Q> return DialogBox(hInst,MAKEINTRESOURCE(IDD_MAIN),hWnd,DLGMAIN);

Q>}

Q>Программа запускается, но никакого окна не открывается.


Вы создаете главным окном именно окно, а не диалог. В добавок вы не вызываете ShowWindow, поэтому у вас никакого окна не показываеться вообще.
В кратце, немодальное диалоговое окно можно создать вот так:


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
static char szAppName[]="СУБД 'Преподаватели'";
HWND hWnd;
MSG msg;

hDlg = CreateDialog(hInstance,(LPCTSTR)IDD_MAIN,0,(DLGPROC)DLGMAIN);
if (!hDlg)
{
        return FALSE;
}
ShowWindow(hDlg, SW_SHOW);
UpdateWindow(hDlg);

while (GetMessage(&msg, NULL, 0, 0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

    return msg.wParam;
}


Модальное соответственно через DialogBox
Re: Сделать диалог главным окном
От: mansur https://netmontools.com
Дата: 10.01.06 08:26
Оценка:
Здравствуйте, vvQuad, Вы писали:

Q>Надо сделать диалоговое окно главным окном при помощи средств API. Как это реализовать? Диалоговое окно будет создаваться редактором ресурсов. Заранее спасибо!


Так у Рихтера:
<code>
int WINAPI _tWinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) {

HWND hwnd = FindWindow(TEXT("#32770"), TEXT("Error Show"));
if (IsWindow(hwnd)) {
// An instance is already running, activate it and send it the new #
SendMessage(hwnd, ESM_POKECODEANDLOOKUP, _ttoi(pszCmdLine), 0);
} else {
DialogBoxParam(hinstExe, MAKEINTRESOURCE(IDD_ERRORSHOW),
NULL, Dlg_Proc, _ttoi(pszCmdLine));
}
return(0);
}
<code>
отлично! на века!
... << RSDN@Home 1.1.4 stable rev. 510>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.