1

所以,我是任何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);
}

第二个示例不包含对 register 函数的任何调用。它只是创建附加了 DialogProc 进程的 DialogBox。

这工作正常,但我想知道注册窗口类然后创建对话框是否有好处(如果这可能的话)。

4

3 回答 3

2

您不必注册对话框。

对话框是预定义的,因此(如您所述)在创建对话框时没有对窗口类的引用。如果您想要更多地控制对话框(就像您在创建自己的窗口类时获得的那样),您可以将对话框子类化,这是一种用您自己的方法替换对话框窗口过程的方法。当你的程序被调用时,你修改对话窗口的行为;然后,您可能会也可能不会调用原始窗口过程,具体取决于您要执行的操作。

于 2008-08-31T18:12:07.443 回答
2

自从我这样做以来已经有一段时间了,但是 IIRC,第一种情况是从内存中的模板动态创建对话框。第二个例子是更常见的使用资源创建对话框的情况。Win32 中的动态对话框内容相当复杂,但它允许您创建真正的数据驱动界面,并避免将资源与 DLL 捆绑在一起的问题。

至于为什么使用 Win32 - 如果您需要一个 Windows 应用程序并且您不想依赖 MFC 或 .NET 运行时,那么这就是您使用的。

于 2008-08-31T19:10:09.427 回答
-1

这只是与问题无关,但如果您是 Windows 编程新手,为什么要使用 Win32?除非有很多低端代码(无论如何都应该与 GUI 分开),否则使用 .NET 可能更有意义,这也会减少头部受伤。

于 2008-08-31T18:19:19.190 回答