目前共有9篇帖子。 內容轉換:不轉換▼
 
點擊 回復
504 8
【程序】用命令行编译对话框程序
一派護法 十九級
1樓 發表于:2016-9-24 23:47
一派護法 十九級
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文件编译程序。

回復帖子

內容:
用戶名: 您目前是匿名發表
驗證碼:
(快捷鍵:Ctrl+Enter)
 

本帖信息

點擊數:504 回複數:8
評論數: ?
作者:巨大八爪鱼
最後回復:巨大八爪鱼
最後回復時間:2016-9-25 22:54
 
©2010-2024 Arslanbar Ver2.0
除非另有聲明,本站採用創用CC姓名標示-相同方式分享 3.0 Unported許可協議進行許可。