资源文件相关学习总结
生活随笔
收集整理的這篇文章主要介紹了
资源文件相关学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
windows資源文件(.rc)是如何變成窗口控件的
? ? 在Visual C++使用資源來創建對話框,菜單,以及一些自定義控件,實際是為了減少基于Win32 SDK
編程開發人員在編寫Application時創建大量窗口,和控件(實際上也是窗口)的痛苦(大量使用
CreateWindow,還要設置其中的參數,有些參數,初始化顯示位置X, Y,窗口(或控件)的寬度和高度等
,使用CreateWindow來設置非常不直觀,只能憑經驗來設置合理的位置和大小)。
? ? 如下圖所示,倘若我們用編程的方式來實現如下對話框,肯定是可以的但是太麻煩了,這個對話框
有好多個控件和資源,如:菜單,組合框,文本輸入框,按鈕,同時還要設置這些控件自身的若干個性
質,還有對話框本身的許多性質,非常麻煩,使用資源這一概念,則大大簡化了我們的編程,我們可以
使用,可視化的工具,來編輯這些窗口和控件。
/
//
// Dialog
//
MYDIALOG DIALOG DISCARDABLE ?0, 0, 200, 126
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Dialog"
MENU IDM_MENU
FONT 10, "System"
BEGIN
? ? DEFPUSHBUTTON ? "計算圓的面積",IDOK,133,56,57,14
? ? EDITTEXT ? ? ? ?IDC_EDIT1,54,38,40,14,ES_AUTOHSCROLL
? ? GROUPBOX ? ? ? ?"請輸入圓的直徑",IDC_STATIC,16,22,111,40
? ? EDITTEXT ? ? ? ?IDC_EDIT2,54,86,40,14,ES_AUTOHSCROLL
? ? GROUPBOX ? ? ? ?"圓的面積:",IDC_STATIC,16,71,110,40
END
/
//
// Menu
//
IDM_MENU MENU
BEGIN
? ? POPUP "&File"
? ? BEGIN
? ? ? ? MENUITEM "&Open", ? ? ? ? ? ? ? ? ? ? ? IDM_FILE_OPEN
? ? ? ? MENUITEM "&New", ? ? ? ? ? ? ? ? ? ? ? ?IDM_FILE_NEW
? ? END
? ? POPUP "&Edit"
? ? BEGIN
? ? ? ? MENUITEM "&Cut", ? ? ? ? ? ? ? ? ? ? ? ?IDM_EDIT_CUT
? ? ? ? MENUITEM "C&opy", ? ? ? ? ? ? ? ? ? ? ? IDM_EDIT_COPY
? ? ? ? MENUITEM "&Paste", ? ? ? ? ? ? ? ? ? ? ?IDM_EDIT_PASTE
? ? END
? ? POPUP "&Help"
? ? BEGIN
? ? ? ? POPUP "&View"
? ? ? ? BEGIN
? ? ? ? ? ? MENUITEM "Content1", ? ? ? ? ? ? ? ? ? ?IDM_VIEW_CONTENT1
? ? ? ? ? ? MENUITEM "Context2", ? ? ? ? ? ? ? ? ? ?IDM_VIEW_CONTEXT2
? ? ? ? END
? ? END
END
? ? 使用Visual C++中自帶的資源編輯器實際上就是創建一個資源描述文件(.rc文件)該文件中記錄了
我們通過可視化工具來“創建”(實際上只是一個可視化表現而已,正真的窗口和控件的創建是在
Application使用該資源時)的窗口和控件的大量參數,這些參數將有操作系統來維護,當我們的
Application需要資源時,由操作系統根據這些參數來創建窗口和控件。
? ? 但是有一個問題:這些窗口和控件都是由系統幫我們創建的,所以我們無法直接獲得它們的句柄
(Handle),這樣我們就沒有辦法使用許多SDK API來和這些窗口及控件來交互(如像:我們打算向上圖
所示的對話框中的文本輸入框發送一條WM_GETTEXT消息來獲得當前文本框的內容,這是就需要知道該文
本輸入框控件的窗口句柄(因為要使用SendMessage函數,該函數的第一個參數就是,目的窗口的句柄)
),為了解決這個問題,Windows采用了一種控件ID的策略,控件ID:唯一地標示了一個窗口或控件,它
(控件ID)是由我們(Programer)來設置的,這些控件ID,系統當然也是可見的,當系統創建控件時,
系統將這些ID和其所對應的窗口的句柄(因為是系統創建的窗口,系統當然應該維護著這些窗口的句柄
)一一對應起來,這樣當我們的Application需要,某一個控件的句柄時就可以使用,一個約定好的API
來通過控件ID來查詢其對應的句柄,這個API就是HWND WINAPI GetDlgItem(__in_opt HWND hDlg, __in?
int nIDDlgItem);這個API的第一個參數,要求我們傳入,我們所要查詢的控件屬于哪一個窗口(實際上
就是父窗口(常常是對話框)句柄,想一下該句柄如何得來,狠簡單啊,少年,我們在使用對話框的時
候,肯定注冊了對話框窗口過程
INT_PTR WINAPI DialogBox(
? __in_opt ?HINSTANCE hInstance,
? __in ? ? ?LPCTSTR lpTemplate,
? __in_opt ?HWND hWndParent,
? __in_opt ?DLGPROC lpDialogFunc
);
注意第四個參數,實際上就是對話框窗口過程
INT_PTR CALLBACK DialogProc(
? __in ?HWND hwndDlg,
? __in ?UINT uMsg,
? __in ?WPARAM wParam,
? __in ?LPARAM lParam
);
注意第一個參數,這就是對話框的句柄啊,所以,可以在處理WM_COMMAND等消息的時候可以直接使用它
,以及要查詢的控件ID,就可以得到該控件的句柄了,這樣就可以調用大量的API函數來和控件進行交互
了!!!!!
?
另一個API
int WINAPI GetDlgCtrlID(
? __in ?HWND hwndCtl
);
========
?rc,res,resx
http://blog.csdn.net/dadahacker/article/details/5525853??
rc是windows窗體程序資源文件(文本)
.res是2進制資源文件 是.rc編譯成的
.resx 資源文件格式由 XML 項組成,這些 XML 項指定 XML 標記內的對象和字符串。.resx 文件的一個
優點在于,當用文本編輯器(例如記事本或 Microsoft Word)打開此類文件時,可以對其進行寫入、分
析和操縱。查看 .resx 文件時,如果嵌入對象(如圖片)的二進制格式是資源清單的一部分,則可以實
際看見此二進制信息。除了此類二進制信息之外,.resx 文件是完全可讀和可維護的。
======== 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的资源文件相关学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 地图瓦片相关学习总结
- 下一篇: panda3d中文网文档翻译