Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DIALOG_BOX, как главное окно 
V
    Опции темы
Dmitriy2k
Дата 21.11.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Главное окно программы в windows создается довольно непростым способом:

Код

HWND hWnd;
WNDCLASS WndClass;
MSG msg;

WndClass.style.....
W............................
.............................

RegisterClass(&WndClass)...

hWnd=CreateWindow(.....)

и т.д.
а так же обрабатывающая процедура окна




Я хотел с помощью редактора ресурсов создать DIALOG_BOX(IDD_MAIN), который и будет основным окном.
Код

#include <windows.h>
#include "rec.h"


BOOL CALLBACK MainDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam);


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,int nCmdShow)
{    
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, DLGPROC(MainDlgProc));
    return 0;
}



BOOL CALLBACK MainDlgProc(HWND hDlg, UINT wMsg, WPARAM wParam, LPARAM lParam)
{  
   
   switch(wMsg)                                
   {
        case WM_INITDIALOG: //Событие создания диалога!

            return TRUE;    
         
        case WM_CLOSE:                        
        
            PostQuitMessage(0);
            
            return TRUE;

        case WM_COMMAND:               
           
            return TRUE; 
            
      return FALSE;
   }
   //return FALSE; */
   return FALSE; 
}




Диалог бокс не создается, хотя программа компилится,
а вот если этот DIALOG_BOX (IDD_MAIN) создать поверх главного окна, то он появится.

у меня подозрения, что в строке
Код

 DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, DLGPROC(MainDlgProc));
    return 0;


какая то проблемма с hInstance
PM MAIL   Вверх
neosapient
Дата 21.11.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Цитата

Диалог бокс не создается, хотя программа компилится,
а вот если этот DIALOG_BOX (IDD_MAIN) создать поверх главного окна, то он появится.


Не совсем понял, что под этой фразой подразумевается.
В листинге, вроде, правильный вызов диалога

Цитата


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,int nCmdShow)
{    
    // у меня подозрения, что в следующей строке, какая то проблемма с hInstance 
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, DLGPROC(MainDlgProc));
    return 0;
}


Пройдись дебагером и ты увидишь, что на вызове этой функции дебагер остановиться и будет стоять пока не закроется диалоговое окно.
PM MAIL   Вверх
Dmitriy2k
Дата 21.11.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Цитата

Не совсем понял, что под этой фразой подразумевается.
В листинге, вроде, правильный вызов диалога


Диалог бокс не появляется на экране вообще. 
Хотя я протестировал твой пример из темы, связаной с BITMAPOM - там все нормально,
значит я что то не правильно сделал
PM MAIL   Вверх
neosapient
Дата 21.11.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 16.8.2006

Репутация: 3
Всего: 4



Возможно, в диалоге использованы дополнительные контролы, типа прогрессбара.
Тогда нужно их подключить 
Код

// подключаем нестандартные контролы
#include <commctrl.h>
#pragma comment(lib,"comctl32.lib")

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,int nCmdShow)
{    
    InitCommonControls (); 
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), 0, DLGPROC(MainDlgProc));
    return 0;
}
...
функция MainDlgProc(...){...}


Покажи свой код, может смогу что-нибудь исправить
PM MAIL   Вверх
Евгений
Дата 22.11.2006, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 14.6.2006
Где: г. Невинномысск

Репутация: нет
Всего: 1



Dmitriy2k, ты просмотри в редакторе ресурсов все необходимые стили установил, а то может WS_VISIBLE не установил и оно не показывается. А так код вроде правильный. Или можешь попробовать с помощью функции CreateDialog(). Удачи!
PM MAIL WWW   Вверх
anwe
Дата 22.11.2006, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 1
Всего: 23



Dmitriy2k, по-моему ты смешал два вида дилогов.
Если ты делаешь и RegisterClass(&WndClass)... и hWnd=CreateWindow(.....), то ты используешь в качестве диалогового окна простой диалог. В этом случае надо использовать функцию CreateDialogParam.
Если же ты используешь WM_INITDIALOG и WM_CLOSE, то это имеет отношение к модальному диалогу. В нем вместо WM_CREATE обрабатываеться WM_INITDIALOG, а вместо WM_DESTROY WM_CLOSE. Но тогда совсем не нужен ни цикл сообщений ни процедура окна, а создается окно функцией DialogBoxParam.
PM MAIL   Вверх
Dmitriy2k
Дата 22.11.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 6.11.2005

Репутация: нет
Всего: нет



Все. Спасибо, ребят за ответы, это я тормоз.
Я вместо сгенеренного заголовка файла ресурсов "resource.h" подключил свой "rec.h", а там , видимо были разногласия.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.