|  | 
          2楼
          巨大八爪鱼
          2016-9-24 23:48
          
          
            先编译资源文件,再编译源文件。【编译资源文件用的批处理: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
 
 | 
    
      |  | 
          3楼
          巨大八爪鱼
          2016-9-24 23:48
          
          
            【资源头文件: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
 
 
 // 资源头文件的最后一行必须是空行, 否则编译会出错
 
 
 | 
    
      |  | 
          4楼
          巨大八爪鱼
          2016-9-24 23:48
          
          
            【资源文件: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
 
 | 
    
      |  | 
          5楼
          巨大八爪鱼
          2016-9-24 23:49
          
          
            【源文件: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;
 }
 
 | 
    
      |  | 
          6楼
          巨大八爪鱼
          2016-9-24 23:49
          
          
            【运行结果】  | 
    
      |  | 
          7楼
          巨大八爪鱼
          2016-9-25 22:49
          
          
            启用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> | 
    
      |  | 
          8楼
          巨大八爪鱼
          2016-9-25 22:50
          
          
            重新编译资源和程序,在Win7下已经可以看到XP风格的控件了:  | 
    
      |  | 
          9楼
          巨大八爪鱼
          2016-9-25 22:54
          
          
            对于更早的系统版本,则需要执行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文件编译程序。
 |