我想使用 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/