c++ - 当我使用 sdk 7.1 编译它时,我的对话框没有出现,

标签 c++ visual-studio-2012

我想使用 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 文件的情况下,它至少有一些工作的机会。

关于c++ - 当我使用 sdk 7.1 编译它时,我的对话框没有出现,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19431047/

相关文章:

c++ - 在 C++ 中读取文本文件

c# - 在 DLL 中编译类并在 C# 中的另一个项目中引用它

c++ - 如何在 VS Code 中使用 Borland C++?

c++ - 从特定行到特定行解析文本文件C++

C++:继承和运算符重载

c++ - priority_queue 常量表达式

c++ - Visual Studio 错误 : LNK1104: cannot open file 'kernel32.lib' - only in WP8 projects/Win32 builds

c++ - 在 Visual Studio 2012 中使用 dlib

visual-studio-2012 - 基本的 XSD 导入和 xsd.exe?

visual-studio - 如何在我的 MS Visual Studio 2012 中的控制台中运行单个类