如何在Win32中使用Dialog资源?

use*_*358 5 c++ windows resources winapi

没有资源,我可以创建与UI一系列复杂的CreateWindow()CreateWindowEx(),以及WndProc()处理我的事件.

我注意到如果我在资源视图中右键单击并单击"添加资源",我可以绘制一个包含所有控件的对话框.如果我可以像通常使用C#那样绘制界面,这将节省我大量的时间.

在我使用资源编辑器绘制界面后,如何从代码创建窗口?有人可以用一个按钮提供一个非常简单的例子,并说明如何处理该按钮上的WM_COMMAND事件吗?

此外,人们通常如何创建GUI?这样做是否有灵活性的损失?即使在C#中,我经常需要使用我自己的代码生成的UI来补充设计器生成的UI,但是大多数时候我很乐意使用设计器.

Jos*_*phH 5

在资源编辑器中创建对话框后,调用CreateDialog(无模式对话框;您需要手动调度消息,就像使用时一样CreateWindow)或DialogBox(模态对话框;在关闭对话框之前函数不会返回.它会为您调度)使对话框显示出来.就像您将窗口proc传递给RegisterClass一样,您将对话框proc传递给那些用于对话框回调的函数.DialogProc的一个例子看起来像这样:

BOOL DialogProc( HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam ){
    switch( iMessage ){
    case WM_COMMAND:
        switch( LOWORD( wParam ) ){
        case BTOK:
            MessageBox( hDlg, "Hello, World!", NULL, NULL );
            return TRUE;
            break;
        }
        break;
    }
    return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

这是创建对话框的基本方法.更复杂的方法通常涉及OOP,通常将每个资源(按钮,窗口等)包装为C++对象或使用MFC.