首页 > 代码库 > 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页
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。