windows編程--動態加載光標和圖標

1. 加載光標   注意 加載光標不能發送WM_SETCURSOR 光標的位置不斷變化 只在一瞬間有效
case WM_CHAR:
    {
       HICON hCursor = = LoadCursor(NULL,IDC_ARROW);   //加載標準光標
                SetClassLong(hWnd,GCL_HCURSOR,(LPARAM)hCursor);
  
     HCURSOR hCursor = LoadCursor(hInst,MAKEINTRESOURCE(IDC_CURSOR1)); //加載自定義光標
     SetClassLong(hWnd,GCL_HCURSOR,(LPARAM)hCursor);

     HCURSOR hCursor2 = LoadCursorFromFile("Cursor.cur"); //從文件加載靜態光標
     SetClassLong(g_hWnd,GCL_HCURSOR,(LPARAM)hCursor2);

     HCURSOR hCursor3 = LoadCursorFromFile("Working.ani"); //從文件加載動態光標
     SetClassLong(hWnd,GCL_HCURSOR,(LPARAM)hCursor3);
    }
    break;

2.加載圖標
HICON hIconN=(HICON)LoadImage(NULL,L"directx.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE);
SetClassLong(DXUTGetHWND(),GCL_HICON,(LPARAM)hIconN);

動態設置圖標時注意
在類的聲明時把 hIconSm 設置爲 NULL 如果一開始就加載圖標 當只有32x32 的圖標時,就無法實現動態變化圖標
// wcex.hIconSm   = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
wcex.hIconSm = NULL;


    // HICON hIconN = LoadIcon(NULL,IDI_HAND);
             HICON hIconN = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON2));
            
         case WM_COMMAND:
    wmId    = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    // Parse the menu selections:
    switch (wmId)
    {
     case IDM_ABOUT:
       DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
       break;
     case IDM_EXIT:
       DestroyWindow(hWnd);
       break;
     case IDI_ICON_C:
      SetClassLong(g_hWnd,GCL_HICON,(LPARAM)hIconN); //設置圖標
      break;
            }
3. SetClassLong 函數可以修改窗口類的背景色 光標 圖標 hInstance 菜單 風格 窗口過程地址
DWORD SetClassLong(
HWND hWnd,       // handle to window
int nIndex,      // index of value to change
LONG dwNewLong   // new value
);
nIndex:
GCL_HBRBACKGROUND
GCL_HCURSOR
GCL_HICON
GCL_HICONSM
GCL_HMODULE
GCL_MENUNAME
GCL_STYLE
GCL_WNDPROC

SendMessage(hWnd,WM_SETICON,ICON_BIG,hIcon);
消息的wParam參數可以是ICON_BIG或ICON_SMALL,用來指定圖標的分辨率爲
32×32還是16×16。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章