Вам нужно зарегистрировать диалоговое окно? - PullRequest
1 голос
/ 31 августа 2008

Итак, я абсолютный новичок в любом виде Windows программирования. Я играл с Windows API и наткнулся на пару примеров, как инициализировать окна создания и тому подобное.

Один пример создает обычное окно (я сократил часть кода):

int WINAPI WinMain( [...] )
{

    [...]

    // Windows Class setup
    wndClass.cbSize = sizeof( wndClass );
    wndClass.style  = CS_HREDRAW | CS_VREDRAW;
    [...]    

    // Register class
    RegisterClassEx( &wndClass );

    // Create window
    hWnd = CreateWindow( szAppName, "Win32 App",
                         WS_OVERLAPPEDWINDOW,
                         0, 0, 512, 384,
                         NULL, NULL, hInstance, NULL );
    [...]
}

Во втором примере создается диалоговое окно (без сокращений, кроме аргументов WinMain):

int WINAPI WinMain( [...] )
{
    // Create dialog box
    DialogBox(hInstance, 
              MAKEINTRESOURCE(IDD_MAIN_DLG), 
              NULL, 
              (DLGPROC)DialogProc);
}

Второй пример не содержит никакого вызова функции регистра. Он просто создает DialogBox с прикрепленным к нему процессом DialogProc.

Это прекрасно работает, но мне интересно, есть ли польза от регистрации класса окна и последующего создания диалогового окна (если это вообще возможно).

Ответы [ 3 ]

2 голосов
/ 31 августа 2008

Вам не нужно регистрировать диалоговое окно.

Диалоговые окна предопределены, поэтому (как вы заметили) при создании диалогового окна нет ссылки на класс окна. Если вы хотите больше контроля над диалогом (как вы получаете, когда создаете свой собственный класс окна), вы бы создали подкласс диалога, который является методом, с помощью которого вы заменяете процедуру окна диалога своей собственной. Когда ваша процедура вызывается, вы изменяете поведение диалогового окна; Затем вы можете или не можете вызвать исходную оконную процедуру в зависимости от того, что вы пытаетесь сделать.

1 голос
/ 31 августа 2008

Прошло много времени с тех пор, как я это сделал, но IIRC, первый случай - это динамическое создание диалога из шаблона в памяти. Второй пример - для гораздо более распространенного случая создания диалога с использованием ресурса. Динамический диалог в Win32 был довольно сложным, но он позволил вам создать настоящий управляемый данными интерфейс и избежать проблем с объединением ресурсов с DLL.

Что касается того, зачем использовать Win32 - если вам нужно приложение для Windows и вы не хотите зависеть от MFC или среды выполнения .NET, то это то, что вы используете.

0 голосов
/ 31 августа 2008

Это только косвенно связано с вопросом, но если вы новичок в программировании Windows, почему вы используете Win32? Если нет большого количества низкоуровневого кода (который в любом случае должен быть отделен от GUI), возможно, имеет смысл использовать .NET, что также должно привести к гораздо меньшим травмам головы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...