Почему не создается окно?
От: Green_B  
Дата: 18.05.03 17:21
Оценка:
Народ!
Хелп! Создаю я значит прогу под ХР и главным окном делаю диалог из ресурсов функцией CreateDialog, но оно почему-то не создается. Может кто скажет почему, может потому, что не регистрирую класс? Если да, то как для диалога зарегистрировать класс? Заранее спасибо!!!
Re: Почему не создается окно?
От: FlashBack  
Дата: 18.05.03 18:09
Оценка:
Здравствуйте, Green_B, Вы писали:

G_B>Хелп! Создаю я значит прогу под ХР и главным окном делаю диалог из ресурсов функцией CreateDialog, но оно почему-то не создается. Может кто скажет почему, может потому, что не регистрирую класс? Если да, то как для диалога зарегистрировать класс? Заранее спасибо!!!


При вызове функции CreateDialog необходимо вызвать ShowWindow(hDlg,nCmdShow), иначе окно есть, но его не видно. hDlg — это возвращаемое значение: HWND hDlg=CreateDialog(...).
Проверь, если hDlg==NULL то значит смотри GetLastError и FormatMessage .
Если не ноль, то ShowWindow(...) тебе поможет.
А можно проще. Есть такая фича — DialogBox:

INT_PTR DialogBox( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);

Она не возвращает указатель на окно, но для него не требуется ShowWindow.
Удачи!
Re[2]: Почему не создается окно?
От: Green_B  
Дата: 18.05.03 19:11
Оценка:
Здравствуйте, FlashBack, Вы писали:

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


G_B>>Хелп! Создаю я значит прогу под ХР и главным окном делаю диалог из ресурсов функцией CreateDialog, но оно почему-то не создается. Может кто скажет почему, может потому, что не регистрирую класс? Если да, то как для диалога зарегистрировать класс? Заранее спасибо!!!


FB>При вызове функции CreateDialog необходимо вызвать ShowWindow(hDlg,nCmdShow), иначе окно есть, но его не видно. hDlg — это возвращаемое значение: HWND hDlg=CreateDialog(...).

FB>Проверь, если hDlg==NULL то значит смотри GetLastError и FormatMessage .
FB>Если не ноль, то ShowWindow(...) тебе поможет.
FB>А можно проще. Есть такая фича — DialogBox:

FB>INT_PTR DialogBox( HINSTANCE hInstance,

FB> LPCTSTR lpTemplate,
FB> HWND hWndParent,
FB> DLGPROC lpDialogFunc
FB>);

FB>Она не возвращает указатель на окно, но для него не требуется ShowWindow.

FB>Удачи!

Дело в том, что у меня в параметрах ресурса стои Висибл (да и ШовВиндов вызывал) просто он мне возвращает ноль (NULL)! Вот в этом-то и проблема!!!
Re[3]: Почему не создается окно?
От: FlashBack  
Дата: 18.05.03 19:14
Оценка:
Здравствуйте, Green_B, Вы писали:

G_B>Дело в том, что у меня в параметрах ресурса стои Висибл (да и ШовВиндов вызывал) просто он мне возвращает ноль (NULL)! Вот в этом-то и проблема!!!


Покажи, как ты вызываешь CreateDialog.
А если не лень, то весь проэкт мыльни, подровняю
Re[4]: Почему не создается окно?
От: Green_B  
Дата: 18.05.03 19:22
Оценка:
Здравствуйте, FlashBack, Вы писали:

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


G_B>>Дело в том, что у меня в параметрах ресурса стои Висибл (да и ШовВиндов вызывал) просто он мне возвращает ноль (NULL)! Вот в этом-то и проблема!!!


FB>Покажи, как ты вызываешь CreateDialog.

FB>А если не лень, то весь проэкт мыльни, подровняю

Вот так выглядит функция ВинМэйн (если не хватит — прошу адрес e-mail, мыльну проект, а пока заранее спасибо):


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    MSG msg;


    HWND list,wnd;

    wnd = CreateDialog(NULL,(LPCSTR)IDD_DIALOG1,NULL,(DLGPROC)LoopD);

    if(!wnd)
    {
        MessageBox(NULL,"ÍÅ ÌÎÃÓ ÑÎÇÄÀÒÜ ÎÊÍÎ","WARNING",0);
        return FALSE;
    }
    
    list = GetDlgItem(wnd,(int)ID_LIST);
    SetTimer(wnd,1,1000,NULL);

    CreateList(list);

    isConnect = FALSE;
    

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

    

    return 1;
}
Re[5]: Почему не создается окно?
От: FlashBack  
Дата: 18.05.03 19:30
Оценка:
Здравствуйте, Green_B, Вы писали:


G_B>Вот так выглядит функция ВинМэйн (если не хватит — прошу адрес e-mail, мыльну проект, а пока заранее спасибо):



G_B>
G_B>int APIENTRY WinMain(HINSTANCE hInstance,
G_B>                     HINSTANCE hPrevInstance,
G_B>                     LPSTR     lpCmdLine,
G_B>                     int       nCmdShow)
G_B>{
G_B>    MSG msg;


G_B>    HWND list,wnd;

G_B>    // wnd = CreateDialog(NULL,(LPCSTR)IDD_DIALOG1,NULL,(DLGPROC)LoopD);//!!!!!!!!?!?!?!

//Надо так:
wnd = CreateDialog(NULL,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC); 
// И всё будет ок :up: 

G_B>    if(!wnd)
G_B>    {
G_B>        MessageBox(NULL,"ÍÅ ÌÎÃÓ ÑÎÇÄÀÒÜ ÎÊÍÎ","WARNING",0);
G_B>        return FALSE;
G_B>    }
    
G_B>    list = GetDlgItem(wnd,(int)ID_LIST);
G_B>    SetTimer(wnd,1,1000,NULL);

G_B>    CreateList(list);

G_B>    isConnect = FALSE;
    

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

    

G_B>    return 1;
G_B>}
G_B>



Цитирую MSDN:

lpTemplate
[in] Specifies the dialog box template. This parameter is either the pointer to a null-terminated character string that specifies the name of the dialog box template or an integer value that specifies the resource identifier of the dialog box template. If the parameter specifies a resource identifier, its high-order word must be zero and its low-order word must contain the identifier. You can use the MAKEINTRESOURCE macro to create this value.


Так что поправь строчку, и радуйся жизни
Re[6]: Почему не создается окно?
От: Green_B  
Дата: 19.05.03 14:43
Оценка:
Здравствуйте, FlashBack, Вы писали:

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



G_B>>Вот так выглядит функция ВинМэйн (если не хватит — прошу адрес e-mail, мыльну проект, а пока заранее спасибо):



G_B>>
G_B>>int APIENTRY WinMain(HINSTANCE hInstance,
G_B>>                     HINSTANCE hPrevInstance,
G_B>>                     LPSTR     lpCmdLine,
G_B>>                     int       nCmdShow)
G_B>>{
G_B>>    MSG msg;


G_B>>    HWND list,wnd;

FB>G_B>    // wnd = CreateDialog(NULL,(LPCSTR)IDD_DIALOG1,NULL,(DLGPROC)LoopD);//!!!!!!!!?!?!?!

FB>//Надо так:
FB>wnd = CreateDialog(NULL,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC); 
FB>// И всё будет ок :up: 

G_B>>    if(!wnd)
G_B>>    {
G_B>>        MessageBox(NULL,"ÍÅ ÌÎÃÓ ÑÎÇÄÀÒÜ ÎÊÍÎ","WARNING",0);
G_B>>        return FALSE;
G_B>>    }
    
G_B>>    list = GetDlgItem(wnd,(int)ID_LIST);
G_B>>    SetTimer(wnd,1,1000,NULL);

G_B>>    CreateList(list);

G_B>>    isConnect = FALSE;
    

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

    

G_B>>    return 1;
G_B>>}
G_B>>



Да нет — дело в том, что я пишу прогу работая в ХР, так вот, если в свойствах файла я ставлю совместимость с Win98 или другой виндой, то он работает, если же нет, то не может создать окно. Потом я перенес экзешник на комп с 98 виндой, но там он тоже не смог создать окно. (кстати, я предложенный вариант тоже попробовал — не катит).
Re[7]: Почему не создается окно?
От: FlashBack  
Дата: 19.05.03 16:06
Оценка:
Здравствуйте, Green_B, Вы писали:

G_B>Да нет — дело в том, что я пишу прогу работая в ХР, так вот, если в свойствах файла я ставлю совместимость с Win98 или другой виндой, то он работает, если же нет, то не может создать окно. Потом я перенес экзешник на комп с 98 виндой, но там он тоже не смог создать окно. (кстати, я предложенный вариант тоже попробовал — не катит).


Дело не в XP. Исспользуй MAKEINTRESOURCE , иначе получишь совершенно неизвестный результат. Так с памятью могут быть глюки.

А если это не помагает, то переустанови окно.

Кстати, нет ли у тебя там Common Controls в твоём диалоге?

P.S. Пришли код обработчика диалога, там тоже глюк бывает такой
Re[8]: Почему не создается окно?
От: Green_B  
Дата: 20.05.03 06:21
Оценка:
Здравствуйте, FlashBack, Вы писали:

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


G_B>>Да нет — дело в том, что я пишу прогу работая в ХР, так вот, если в свойствах файла я ставлю совместимость с Win98 или другой виндой, то он работает, если же нет, то не может создать окно. Потом я перенес экзешник на комп с 98 виндой, но там он тоже не смог создать окно. (кстати, я предложенный вариант тоже попробовал — не катит).


FB>Дело не в XP. Исспользуй MAKEINTRESOURCE , иначе получишь совершенно неизвестный результат. Так с памятью могут быть глюки.


FB>А если это не помагает, то переустанови окно.


FB>Кстати, нет ли у тебя там Common Controls в твоём диалоге?


FB>P.S. Пришли код обработчика диалога, там тоже глюк бывает такой


Вот обработчик для диалогано дело в том, что я запустил прогу под 2000 виндой и все заработало, а в ХР, чтобы она запустилась — нужнео ставить флажок совместимости с другими виндами!! Теперь попробую в 98ой, но по-моему он требует какую-то ДЛЛ АПИ, что касается комон контрол — есть — что-то вроде SysListView32)

LRESULT CALLBACK LoopD(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_INITDIALOG:
                return TRUE;

        case WM_CLOSE:
            DestroyWindow(hDlg);
            PostQuitMessage(0);
            break;

        case WM_TIMER:
            CalcStat();
            break;

        case WM_COMMAND:
            if(LOWORD(wParam) == IDOK) 
            {
                DestroyWindow(hDlg);
                PostQuitMessage(0);
                return TRUE;
            }
            if(wParam==ID_SETTING)
            {
                Setting(hDlg);
            }
            break;
    }
    return FALSE;
}
Re[8]: Почему не создается окно?
От: Patalog Россия  
Дата: 20.05.03 08:27
Оценка: +1
Здравствуйте, FlashBack, Вы писали:

[]

FB>Дело не в XP. Исспользуй MAKEINTRESOURCE , иначе получишь совершенно неизвестный результат. Так с памятью могут быть глюки.


В чем по вашему сакральное отличие
wnd = CreateDialog(NULL, (LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)LoopD);

от
wnd = CreateDialog(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC);


Тем более, что

с памятью могут быть глюки


Ежели мой winuser.h не врет, то
#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))

(проблему unicode думется мы в данном контексте не рассматриваем)

FB>А если это не помагает, то переустанови окно.


А что значит "переустанови окно"?
Почетный кавалер ордена Совка.
Re[9]: Почему не создается окно?
От: FlashBack  
Дата: 20.05.03 09:16
Оценка:
Здравствуйте, Green_B, Вы писали:

У меня WM_INITDIALOG возвращает 0 и работает. Попробуй, поменяй
Re[9]: Почему не создается окно?
От: FlashBack  
Дата: 20.05.03 09:22
Оценка:
Здравствуйте, Patalog, Вы писали:

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


P>[]


P>В чем по вашему сакральное отличие

P>
P>wnd = CreateDialog(NULL, (LPCTSTR)IDD_DIALOG1, NULL, (DLGPROC)LoopD);
P>

P>от
P>
P>wnd = CreateDialog(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC);
P>

P>
P>Тем более, что
P>

P>с памятью могут быть глюки


Извиняюсь, опечатка:
wnd = CreateDialog(NULL, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)LoopD);

P>Ежели мой winuser.h не врет, то

P>
P>#define MAKEINTRESOURCEA(i) (LPSTR)((ULONG_PTR)((WORD)(i)))
P>

P>(проблему unicode думется мы в данном контексте не рассматриваем)

А у меня с LPSTR глюки, а с MAIKEINTRESOURCE всё ок
FB>>А если это не помагает, то переустанови окно.

P>А что значит "переустанови окно"?

Windows в смысле
Re[10]: Почему не создается окно?
От: Patalog Россия  
Дата: 20.05.03 10:09
Оценка:
Здравствуйте, FlashBack, Вы писали:

[]

FB>А у меня с LPSTR глюки, а с MAIKEINTRESOURCE всё ок


Дело в том, что MAIKEINTRESOURCE ничего магического не делает. Просто приводит младшее слово к char*. И ежели id контрола у него не более 65535, то результат будет одинаковым. Т.е. проблемы у автора совсем даже не в MAIKEINTRESOURCE.

FB>>>А если это не помагает, то переустанови окно.


P>>А что значит "переустанови окно"?


FB>Windows в смысле


Круто! Так ее.
Почетный кавалер ордена Совка.
Re: Почему не создается окно?
От: RS Земля ICQ: 148844272
Дата: 20.05.03 12:49
Оценка: 24 (1)
Здравствуйте, Green_B, Вы писали:

G_B>Народ!

G_B>Хелп! Создаю я значит прогу под ХР и главным окном делаю диалог из ресурсов функцией CreateDialog, но оно почему-то не создается. Может кто скажет почему, может потому, что не регистрирую класс? Если да, то как для диалога зарегистрировать класс? Заранее спасибо!!!

Тут уже говорили, а тему не развили (почему-то). Итак, у тебя там listview? А где InitCommonControls[Ex]?
Re[5]: Почему не создается окно?
От: Дмитро  
Дата: 20.05.03 13:35
Оценка:
Здравствуйте, Green_B

Не думаю, что проблема в этом, но это нормально передавать NULL в качестве HINSTANCE?
--
Дмитрий
Re[2]: Почему не создается окно?
От: Green_B  
Дата: 21.05.03 08:50
Оценка:
Здравствуйте, RS, Вы писали:

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


G_B>>Народ!

G_B>>Хелп! Создаю я значит прогу под ХР и главным окном делаю диалог из ресурсов функцией CreateDialog, но оно почему-то не создается. Может кто скажет почему, может потому, что не регистрирую класс? Если да, то как для диалога зарегистрировать класс? Заранее спасибо!!!

RS>Тут уже говорили, а тему не развили (почему-то). Итак, у тебя там listview? А где InitCommonControls[Ex]?


А нельзя ли поподробнее — где вызывается эта функция и как?
Я тут быстренько заглянул в Хелп — она там вообще без параметров!!!
Re[3]: Почему не создается окно?
От: IPv6 Казахстан  
Дата: 21.05.03 09:02
Оценка:
Здравствуйте, Green_B, Вы писали:

G_B>А нельзя ли поподробнее — где вызывается эта функция и как?

G_B>Я тут быстренько заглянул в Хелп — она там вообще без параметров!!!

и это правильно. а всетаки GetLastError после ошибки что возвращает?
Re[3]: Почему не создается окно?
От: SergH Россия  
Дата: 21.05.03 23:17
Оценка:
Здравствуйте, Green_B, Вы писали:

RS>>Тут уже говорили, а тему не развили (почему-то). Итак, у тебя там listview? А где InitCommonControls[Ex]?


G_B>А нельзя ли поподробнее — где вызывается эта функция и как?

G_B>Я тут быстренько заглянул в Хелп — она там вообще без параметров!!!

Это такая полезная функция, которую нужно вызывать перед явным (сам создаёшь) или неявным (на диалогах) продвинутых контролов (список, дерево, ..) Но если ты её не вызываешь, то странно, что неработает только в XP. Должно неработать вообще...
Делай что должно, и будь что будет
Re[4]: Почему не создается окно?
От: Green_B  
Дата: 22.05.03 07:44
Оценка:
Здравствуйте, IPv6, Вы писали:

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


G_B>>А нельзя ли поподробнее — где вызывается эта функция и как?

G_B>>Я тут быстренько заглянул в Хелп — она там вообще без параметров!!!

IP>и это правильно. а всетаки GetLastError после ошибки что возвращает?


Еще не проверял — как узнаю — напишу. За зачетной неделей некогда и делом занятся.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.