簡體   English   中英

Win32編程中的資源和控件位置

[英]Resources and control position in win32 programming

我是Win32編程的新手,並且對資源有一些疑問。

我必須使用資源編輯器(來自Visual Studio)進行控制嗎? 我知道可以使用Resource Hacker編輯器對其進行后期編輯。 怎么預防呢?

無法使用res hacker編輯在Windows Forms(.net)或Borland Delphi(VCL)中創建的GUI,也許它在運行時創建了控件。

是一件毫無意義的工作,可以在運行時進行所有控制以防止由res hacker編輯嗎?

HWND hButton = CreateWindowEx(
    0,
    _T("BUTTON"),
    _T("Click!"),
    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON | BS_LEFTTEXT,
    5, 5, 80, 25, hwnd, (HMENU)IDC_BUTTON1,
    GetModuleHandle(NULL),
    NULL
);

第二個問題:沒有簡單的方法可以在父窗口的右上角設置控件的位置嗎?

今天,我以這種方式進行操作:

case WM_SIZE:
    {
        HWND hButton;
        RECT rcParent, rcButton;

        hButton = GetDlgItem(hwnd, IDC_BUTTON1);

        GetClientRect(hwnd, &rcParent);
        GetClientRect(hButton, &rcButton);

        if(!SetWindowPos(hButton, 0, rcParent.right - (rcButton.right - rcButton.left + 5), 5, 0, 0, SWP_NOSIZE))
        {
            MessageBox(hwnd, _T("Error at WM_SIZE"), _T("Error!"), MB_OK | MB_ICONERROR);
        }
    }
    break;

在純Win32編程中是否存在類似於錨點的內容?

對話框的資源文件格式是古老的。 唯一支持它的是對話框單元抽象,這意味着對話框會自動縮放以考慮用戶首選的字體並顯示dpi設置。

除此之外,對話格式不支持錨點。 遺憾的是,Microsoft尚未發布用於本機開發的新UI構建工具包,因此對於本機Win32應用程序,您將無法在運行時為對話框資源無法完成的任何任務手動創建/定位控件。

WPF顯然是優越的,但需要.NET

我不認為禁止res入侵是一種方法。 預防它有什么好處? 如果您自己的布局技巧太差,以至於人們會想要“非法”重新布局對話框,那么……我只能說wtf。

總結一下:

  • 嘗試保護對話框布局毫無意義。 通過限制人們僅在您自己的布局是#@%^時才訴諸的東西,您可能希望實現什么?
  • 但是,您可能還是想在運行時創建控件,因為對話框資源格式缺少錨點等現代功能。 但是,最好繼續實踐基於字體規格而不是像素的單位設計表單的做法。
  • 如果您需要帶有錨點的預構建“表單”布局系統,Win32將無法為您提供幫助。 如果您想要跨平台的c ++解決方案,或者切換到.NET的WPF,則QT框架都是強大的替代方案,可讓您利用現有的非UI代碼。

是一件毫無意義的工作,可以在運行時進行所有控制以防止由res hacker編輯嗎?

這不是沒有意義的,只是額外的工作。 您還需要對資源編輯器和/或布局管理器進行編碼,以簡化工作。 您可以定義和處理自己的資源定義文件,並將其作為自定義資源。

在純Win32編程中是否存在類似於錨點的內容?

純Win32中沒有布局管理器。 但是您可能會找到一些免費的源代碼來執行此操作。 做一些最小的布局管理器很容易。

嗨,可能不是因為win32 api是Windows中大多數圖形庫的基礎。 如果可以在項目中使用它,我可以建議您使用一些圖形庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM