0

我想使用 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,安装正确,我在没有任何资源文件的基本窗口中测试它

4

2 回答 2

1

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

rc -r resource.rc

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

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

我还没有测试您的代码以查看它是否可以正常工作,但至少在.res链接文件的情况下,它至少有一些工作机会。

于 2013-10-17T15:51:35.463 回答
0

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

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

[强调补充。]

于 2013-10-17T19:43:02.363 回答