1. 程式人生 > >Windows 程式設計 (選單及其它資源)

Windows 程式設計 (選單及其它資源)

將圖示新增到程式
 
將資源新增到程式中需要Visual C++ Developer Studio的一些附加功能。對於圖示來說,可以使用「Image Editor」(也稱為「Graphics Editor」 )來繪製圖標的影象。該影象被儲存在副檔名為.ICO的圖示檔案中。Developer Studio還產生一個資源描述檔 (副檔名為.RC的檔案,有時也稱作資源定義檔案),它列出了程式的所有資源和一個讓程式引用資源的表頭檔案(RESOURCE.H) 。

下面把上頭那段程式程式碼加以修改,以便使用加速鍵:
while       (GetMessage (&msg, NULL, 0, 0)) 

   if (!TranslateAccelerator

(hwnd, hAccel, &msg)) 
    { 
                  TranslateMessage (&msg) ; 
                  DispatchMessage (&msg) ; 
           } 

        
TranslateAccelerator函式確認存放在msg訊息結構中的訊息是否為鍵盤訊息。如果是,該函式將找尋控制代碼為hAccel的快捷鍵表。如果找到了一個符合的,則呼叫控制代碼為hwnd的視窗訊息處理程式。如果快捷鍵ID與系統選單的選單項一致,則訊息就是WM_SYSCOMMAND;否則,訊息為WM_COMMAND。

當TranslateAccelerator傳回時,如果訊息已經被轉換(並且已經被髮送給視窗訊息處理程式),那麼傳回值為非零;否則,傳回值為0。如果TranslateAccelerator傳回一個非零
值,則不呼叫TranslateMessage和DispatchMessage,而是經過迴圈回到GetMessage呼叫中。

TranslateMessage中的引數hwnd看起來有點累贅,因為訊息迴圈中的其它三個函式都沒有要求這個引數。此外,訊息結構本身(結構變數msg)有一個叫做hwnd的成員,它是視窗控制代碼。

 
該函式有些不同的原因在於:msg結構的欄位由GetMessage呼叫填入。當GetMessage的第二個引數為NULL時, 函式會找尋應用程式所有視窗的訊息。 當GetMessage傳回時, msg結構的hwnd是將要獲得訊息之視窗的視窗控制代碼。然而,當TranslateAccelerator把鍵盤訊息轉換為WM_COMMAND或WM_SYSCOMMAND訊息時, 它使用函式的第一個引數指定的視窗控制代碼hwnd來代替視窗代號msg.hwnd。Windows就是這樣把所有快捷鍵訊息傳送給同一視窗訊息處理程式的,即使另一個應用視窗目前擁有輸入焦點。當系統模態對話方塊或者訊息框擁有輸入焦點時,TranslateAccelerator不會轉換鍵盤訊息,因為這些視窗的訊息是不經過程式的訊息迴圈的。

 
控制元件型態                       視窗類別                                   視窗樣式 
PUSHBUTTON             按鈕                                  BS_PUSHBUTTON | WS_TABSTOP 
DEFPUSHBUTTON     按鈕                                  BS_DEFPUSHBUTTON | WS_TABSTOP 
CHECKBOX                  按鈕                                  BS_CHECKBOX | WS_TABSTOP 
RADIOBUTTON            按鈕                                  BS_RADIOBUTTON | WS_TABSTOP 
GROUPBOX                  按鈕                                  BS_GROUPBOX | WS_TABSTOP 
LTEXT                          靜態文字                            SS_LEFT | WS_GROUP 
CTEXT                         靜態文字                             SS_CENTER  | WS_GROUP 
RTEXT                         靜態文字                             SS_RIGHT | WS_GROUP
ICON                           靜態圖示                             SS_ICON 
EDITTEXT                  編輯                                    ES_LEFT | WS_BORDER | WS_TABSTOP 
SCROLLBAR             滾動條                                             SBS_HORZ 
LISTBOX                    清單方塊                             LBS_NOTIFY  | WS_BORDER | WS_VSCROLL 
COMBOBOX             下拉式清單方塊                    CBS_SIMPLE  | WS_TABSTOP