Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 您必须注册一个对话框吗?_C++_Winapi - Fatal编程技术网

C++ 您必须注册一个对话框吗?

C++ 您必须注册一个对话框吗?,c++,winapi,C++,Winapi,因此,我对任何类型的Windows相关编程都是一个完全的初学者。我一直在玩WindowsAPI,遇到了几个关于如何初始化创建窗口之类的例子 一个示例创建了一个常规窗口(我缩写了一些代码): 第二个示例创建一个对话框(除WinMain参数外,没有缩写): 第二个示例不包含对register函数的任何调用。它只是创建带有DialogProc进程的DialogBox 这很好,但是我想知道注册窗口类然后创建对话框是否有好处(如果可能的话) 您不必注册对话框 对话框是预定义的(如您所述),因此在创建对话框

因此,我对任何类型的
Windows
相关编程都是一个完全的初学者。我一直在玩
Windows
API
,遇到了几个关于如何初始化创建窗口之类的例子

一个示例创建了一个常规窗口(我缩写了一些代码):

第二个示例创建一个对话框(除WinMain参数外,没有缩写):

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


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

您不必注册对话框


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

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

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


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

对话框有预定义的窗口类(#32770),因此您不必注册任何内容。顺便说一句,“意味着”MauntRealStudio。建议使用.NET代替C++或本机窗口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 );
    [...]
}
int WINAPI WinMain( [...] )
{
    // Create dialog box
    DialogBox(hInstance, 
              MAKEINTRESOURCE(IDD_MAIN_DLG), 
              NULL, 
              (DLGPROC)DialogProc);
}