当我使用 SDK 7.1 编译它时,我的对话框没有显示

my dialog box did not show up when I compile it using sdk 7.1,

本文关键字:我的 对话框 显示 编译 SDK      更新时间:2023-10-16

我想使用 sdk 7.1 构建一个 win32 应用程序,我使用 Visual C++ 2012 资源编辑器创建对话框,我将 resource.rc 和 resource.h 复制到我的文件夹中,然后编写这个简单的 main.cpp 文件:

#include <windowsx.h>
#include <Windows.h>
#include <tchar.h>
#include "resource.h"
#define my_PROCESS_MESSAGE(hWnd, message, fn)   
    case(message):  
        return( 
            SetDlgMsgResult(hWnd, uMsg, 
                HANDLE_##message((hWnd), (wParam), (lParam), (fn)) ))   
LRESULT CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam);
void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify);
int WINAPI _tWinMain(   HINSTANCE   hInstance,
                        HINSTANCE,
                        LPTSTR,
                        int         iCmdLine    )
{
    DialogBoxParam(     hInstance,
                        MAKEINTRESOURCE(IDD_INJECTOR),
                        NULL,
                        (DLGPROC) DlgProc,
                        NULL
                        );
    return FALSE;
}
LRESULT CALLBACK DlgProc(   HWND    hwnd,
                            UINT    uMsg,
                            WPARAM  wParam,
                            LPARAM  lParam  )
{
    switch (uMsg)
    {
        my_PROCESS_MESSAGE(hwnd, WM_INITDIALOG, Cls_OnInitDialog);
        my_PROCESS_MESSAGE(hwnd, WM_COMMAND, Cls_OnCommand);
    default:
        break;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

BOOL Cls_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
    return TRUE;
}
void Cls_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{
    switch(id)
    {
    case IDCANCEL:
        EndDialog(hwnd, id);
        break;
    default:
        break;
    }
}

然后我使用以下命令行来编译我的代码,我在这个论坛上找到

cl main.cpp /link /SUBSYSTEM:WINDOWS user32.lib
我的

问题是我的对话框没有显示,当我使用 procexp 查看会发生什么时,我发现我的应用程序已创建然后同时关闭,让我想知道的是它在 Visual C++ 2012 上工作正常。

我的 sdk 7.1,安装正确,我在没有任何资源文件的基本窗口上测试它

您需要使用资源编译器"编译"资源文件:

rc -r resource.rc

那会给你resource.res.创建可执行文件时,您需要将其链接在:

cl main.cpp resource.res /link /SUBSYSTEM:WINDOWS user32.lib

我还没有测试你的代码看看它是否有效,但至少在链接.res文件的情况下,它至少有机会工作。

这不是您唯一的问题,但是,来自 MSDN:

尽管对话框过程类似于窗口过程,但它不得调用 DefWindowProc 函数来处理不需要的消息。不需要的消息由对话框窗口过程在内部处理。

[着重号后加。