首页 > 代码库 > windows 程序设计自学:添加图标资源

windows 程序设计自学:添加图标资源

 1 #include <windows.h> 2 #include "resource.h" 3  4 LRESULT CALLBACK MyWndProc(  HWND hwnd,      // handle to window 5   UINT uMsg,      // message identifier 6   WPARAM wParam,  // first message parameter 7   LPARAM lParam   // second message parameter 8   ); 9 10 int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )11 {12     TCHAR szAppName[] = TEXT("IconDemo");13     WNDCLASS wnd;14     HWND hwnd;15     MSG msg;16     wnd.style = CS_HREDRAW | CS_VREDRAW; //水平或垂直改变窗口都被重绘 与MyWndProc的WM_PAINT消息关联17     wnd.lpfnWndProc = MyWndProc;18     wnd.cbClsExtra = 0;19     wnd.cbWndExtra = 0;20     wnd.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));21     wnd.hCursor = LoadCursor(NULL, IDC_ARROW);22     wnd.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);23     wnd.lpszMenuName = NULL;24     wnd.lpszClassName = szAppName; //窗口类标识,用在CreateWindow的第一个参数25     wnd.hInstance = hInstance;26     if(!RegisterClass(&wnd))27     {28         MessageBox(NULL, TEXT("无法创建窗口"), TEXT("ERROR"), MB_OK|MB_ICONERROR);29         return 0;30     }31     32     hwnd = CreateWindow(szAppName, TEXT("Hello"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); //第二个参数为窗口标题33     ShowWindow(hwnd, nShowCmd);34     UpdateWindow(hwnd);35     while (GetMessage(&msg, NULL, 0, 0))36     {37         TranslateMessage(&msg);38         DispatchMessage(&msg);39     }40     return 0;41 }42 43 LRESULT CALLBACK MyWndProc(  HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)44 {45     HDC hdc; //定义设备环境句柄46     PAINTSTRUCT ps; //绘制结构47 48     static HICON hIcon;49     static int cxIcon, cyIcon, cxClient, cyClient;50     HINSTANCE hInstance;51     int x, y;52 53     switch(uMsg)54     {55 56     case WM_CREATE:57     {58         hInstance = ((LPCREATESTRUCT) lParam)->hInstance;//WM_CREATE消息的lParam参数是一个CREATESTRUCT结构的指针,包含hInstance.59         hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON));60         cxIcon = GetSystemMetrics(SM_CXICON); //获取图标大小,上一条LoadIcon关联61         cyIcon = GetSystemMetrics(SM_CYICON);62         return 0;63     }64     break;65     66     case WM_PAINT:67     {68         hdc = BeginPaint(hwnd, &ps);69         for (y = 0; y < cyClient; y += cyIcon)70         {71             for (x = 0; x < cxClient; x += cxIcon)72             {73                 DrawIcon(hdc, x, y, hIcon); //绘制74             }75             76         }77         EndPaint(hwnd, &ps);78         79     }80     break;81 82     case WM_SIZE:83     {    84         cxClient = LOWORD(lParam);85         cyClient = HIWORD(lParam);86     }87     break;88 89     case WM_DESTROY:90         PostQuitMessage(0);91         return 0;92     }93 94     return DefWindowProc(hwnd, uMsg, wParam, lParam);    95 }

注:参阅windows 程序设计第五版334页