Здравствуйте, vvQuad, Вы писали:
Q>Надо сделать диалоговое окно главным окном при помощи средств API. Как это реализовать? Диалоговое окно будет создаваться редактором ресурсов. Заранее спасибо!
int WINAPI WinMain(...)
{
return DialogBox(...);
}
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
Здравствуйте, vvQuad, Вы писали:
Q>Надо сделать диалоговое окно главным окном при помощи средств API. Как это реализовать? Диалоговое окно будет создаваться редактором ресурсов. Заранее спасибо!
Регистрировать класс окна не нужно, окно создавать не нужно, цикл сообщений не нужен. Просто нужно вызвать DialogBox(...) и все. И естественно Функцию обработки сообщений диалога.
Здравствуйте, 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
Здравствуйте, 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>>