zoukankan      html  css  js  c++  java
  • 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页

  • 相关阅读:
    LAMP
    监控和安全运维 1.8 zabbix服务端安装
    监控和安全运维 1.7 nagios配置邮件告警
    易道用车-拿什么说爱你
    unix exec族函数 关于参数的疑惑
    关于 Unix 用户权限及进程权限及 Saved set-user-id
    ANSI C中关于FILE流的一些
    Filco minila 的蛋疼。
    IIS32位,64位模式下切换
    Gvim+Emmet.vim 那些事。
  • 原文地址:https://www.cnblogs.com/bjdxy/p/3819396.html
Copyright © 2011-2022 走看看