 |
先编译资源文件,再编译源文件。 【编译资源文件用的批处理:compile_rc.bat】 @echo off REM 编译资源文件 "C:\Program Files (x86)\Windows Kits\8.0\bin\x86\rc.exe" /i "C:\Program Files (x86)\Windows Kits\8.0\Include\um" /i "C:\Program Files (x86)\Windows Kits\8.0\Include\shared" resource.rc pause 【编译源文件用的批处理:compile_wnd.bat】 @echo off path=%path%;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe" -c wnd.c -I "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include" -I "C:\Program Files (x86)\Windows Kits\8.0\Include\um" -I "C:\Program Files (x86)\Windows Kits\8.0\Include\shared" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\link.exe" wnd.obj resource.res "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\uuid.lib" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\libcmt.lib" "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib\oldnames.lib" "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\kernel32.lib" "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\user32.lib" pause
|
 |
【资源头文件:resource.h】 #define MYICON 101 #define MYMENU 102 #define IDM_OPEN 103 #define IDM_EXIT 104 #define IDM_ABOUT 105 #define IDM_NEW_DAT 106 #define IDM_NEW_TEXT 107
#define MYBITMAP 108 #define MYDIALOG 109
// 资源头文件的最后一行必须是空行, 否则编译会出错
|
 |
【资源文件:resource.rc】 #include <Windows.h> #include "resource.h"
#pragma code_page(936) // 简体中文
// 位图 MYBITMAP BITMAP "bmp_example.bmp"
// 图标 MYICON ICON "shell32_142.ico"
// 菜单 MYMENU MENU BEGIN POPUP "文件(&F)" BEGIN POPUP "新建(&N)" BEGIN MENUITEM "数据文件", IDM_NEW_DAT // 必须指定ID MENUITEM "文本文件", IDM_NEW_TEXT END MENUITEM "打开(&O)...\tCtrl+O", IDM_OPEN MENUITEM SEPARATOR MENUITEM "退出(&E)", IDM_EXIT END POPUP "帮助(&H)" BEGIN MENUITEM "关于(&A)...", IDM_ABOUT END END
// 对话框 MYDIALOG DIALOGEX 0, 0, 200, 150 STYLE WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_CENTER | DS_MODALFRAME | DS_FIXEDSYS CAPTION "示例对话框" BEGIN DEFPUSHBUTTON "确定", IDOK, 100, 14, 32, 14, WS_GROUP END
|
 |
【源文件:wnd.c】 #include <tchar.h> #include <Windows.h> #include "resource.h"
INT_PTR CALLBACK DlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HICON hIcon, hIconSm; HMENU hMenu; int wmId; switch (uMsg) { case WM_COMMAND: wmId = LOWORD(wParam); switch (wmId) { case IDOK: MessageBox(hDlg, TEXT("Hello World!"), TEXT("Hello"), MB_OK); break; case IDCANCEL: EndDialog(hDlg, wmId); break; case IDM_OPEN: MessageBox(hDlg, TEXT("Cannot open!"), TEXT("Error"), MB_ICONERROR); break; } break; case WM_INITDIALOG: hIcon = LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(MYICON), IMAGE_ICON, GetSystemMetrics(SM_CXICON), GetSystemMetrics(SM_CYICON), (UINT)NULL); hIconSm = LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(MYICON), IMAGE_ICON, GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), (UINT)NULL); SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon); SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hIconSm); hMenu = LoadMenu(GetModuleHandle(NULL), MAKEINTRESOURCE(MYMENU)); SetMenu(hDlg, hMenu); break; } return FALSE; }
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { DialogBox(hInstance, MAKEINTRESOURCE(MYDIALOG), NULL, DlgProc); return 0; }
|
 |
【运行结果】 
|
 |
启用XP风格控件的方法很简单。 在rc文件中加入:1 24 "24.txt"  然后创建一个24.txt的文本文件,内容如下: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApplication" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
|
 |
重新编译资源和程序,在Win7下已经可以看到XP风格的控件了: 
|
 |
对于更早的系统版本,则需要执行InitCommonControls函数初始化控件。 方法如下: 打开wnd.c文件,在#include <Windows.h>下加入#include <CommCtrl.h>,然后在DialogBox函数前加上InitCommonControls();,保存文件。 然后打开compile_wnd.bat文件,在link.exe那一行的最后加上 "C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\comctl32.lib",注意引号前有空格。 最后运行compile_wnd.bat文件编译程序。
|