Windows API一日一練(10)LoadAccelerators函數

來源:互聯網
上載者:User
 當使用者使用軟體時,往往有些功能是最常用的功能。作為開發人員,就需要讓使用者感覺到這個軟體好用,這樣就需要把他們最常用的功能用起來最方便,最快捷,能提高生產效率。在這方面,微軟是做到家了,比如在鍵盤上有一個Windows鍵,Windows很多功能都可以通過這個鍵與其它鍵來組合成快速鍵,提高使用的方便性。現在就來介紹一下怎麼樣讓你的程式也方便使用,就是使用快速鍵。
函數LoadAccelerators聲明如下:
WINUSERAPI
HACCEL
WINAPI
LoadAcceleratorsA(
    __in_opt HINSTANCE hInstance,
    __in LPCSTR lpTableName);
WINUSERAPI
HACCEL
WINAPI
LoadAcceleratorsW(
    __in_opt HINSTANCE hInstance,
    __in LPCWSTR lpTableName);
#ifdef UNICODE
#define LoadAccelerators LoadAcceleratorsW
#else
#define LoadAccelerators LoadAcceleratorsA
#endif // !UNICODE

hInstance是應用程式執行個體控制代碼,用來從程式的資源檔裡尋找到快速鍵定義。
lpTableName是快速鍵的定義表格。

調用這個函數的執行個體如下:
#001 //主程式入口
#002 //
#003 // 蔡軍生 2007/07/12
#004 //
#005 int APIENTRY _tWinMain(HINSTANCE hInstance,
#006                       HINSTANCE hPrevInstance,
#007                       LPTSTR    lpCmdLine,
#008                       int      nCmdShow)
#009 {
#010  UNREFERENCED_PARAMETER(hPrevInstance);
#011  UNREFERENCED_PARAMETER(lpCmdLine);
#012
#013   //
#014  MSG msg;
#015  HACCEL hAccelTable;
#016
#017  // 載入全域字串。
#018  LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
#019  LoadString(hInstance, IDC_TESTWIN, szWindowClass, MAX_LOADSTRING);
#020  MyRegisterClass(hInstance);
#021
#022  // 應用程式初始化:
#023  if (!InitInstance (hInstance, nCmdShow))
#024  {
#025         return FALSE;
#026  }
#027
#028  hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWIN));
#029
#030  // 訊息迴圈:
#031  while (GetMessage(&msg, NULL, 0, 0))
#032  {
#033         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
#034         {
#035               TranslateMessage(&msg);
#036             DispatchMessage(&msg);
#037         }
#038  }
#039
#040  return (int) msg.wParam;
#041 }

第28行就是調用函數LoadAccelerators從資源裡載入快速鍵。

到這裡,就已經瞭解和使用LoadAccelerators函數了。但還有一個問題,就是快速鍵的資源是怎麼樣定義的呢?問得好,下面就帶你看一下它的定義:
#001 /////////////////////////////////////////////////////////////////////////////
#002 //
#003 // Accelerator
#004 //
#005
#006 IDC_TESTWIN ACCELERATORS
#007 BEGIN
#008      "?",            IDM_ABOUT,              ASCII, ALT
#009      "/",            IDM_ABOUT,              ASCII, ALT
#010 END
#011

這是從資源檔TestWin.rc裡拷貝出來的。IDC_TESTWIN是快速鍵表的名稱,ACCELERATORS是快速鍵定義的關鍵字,BEGIN是表示快速鍵的開始,END是表示快速鍵的結束。
下面快速鍵定義文法:
acctablename ACCELERATORS [optional-statements] {event, idvalue, [type] [options]... }
[optional-statements]是可選的選項。
event是必須有的內容,它是定義的鍵碼,或者鍵的ASCII碼。
idvalue是快速鍵響應的ID命令。
type是類型選擇。
上面第8行和第9行裡就是設定ALT+‘?’或者ALT + ‘/’作為快速鍵,當使用者按下ALT+‘?’或者ALT + ‘/’時就會彈出關於對話方塊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.