zoukankan      html  css  js  c++  java
  • 无效区产生时机和绘制dc

    //派发消息到对应的窗口过程函数

    LRESULT DispatchMessage(

     CONST MSG *lpmsg // message information 消息地址

    );

    绘图消息 WM_PAINT

    消息来的时机:

    当产生无效区的时候,系统会发送WM_PAINT消息。

     无效区 -- 窗口需要重新绘制的部分

    无效区产生的时机

    1.   最小化恢复的时候

    2.  被覆盖的部分重新显示(win10 移除屏幕外)

    3. 拖动鼠标移动菜单,不会产生,因为系统做了优化

    4. 窗口的尺寸被修改

    5.  还有一些API可以发送WM_PAINT消息 

    例如:  指定位置发送绘制消息

    BOOL InvalidateRect(

    HWND hWnd, // handle to window

    CONST RECT* lpRect, // rectangle coordinates 绘制矩形   左上右下两个点

    BOOL bErase // erase state 是否更新背景

    );

    (UpdateWindow)(必须加在一起来重新绘制窗口)

    绘制区域

    typedef struct tagPAINTSTRUCT {

      HDC  hdc; 显示dc用来绘制

      BOOL fErase; 是否删除背景

      RECT rcPaint; 绘制矩形   左上右下两个点

      BOOL fRestore; 恢复系统内部使用

      BOOL fIncUpdate; 更新系统内部使用

      BYTE rgbReserved[32]; 保留系统内部使用

    } PAINTSTRUCT, *PPAINTSTRUCT;

     

    HDC获得显示图案的环境(上下文)

    开始绘制图案位置

    HDC BeginPaint(

    HWND hwnd, // handle to window 窗口句柄

    LPPAINTSTRUCT lpPaint // paint information指向将接收的PAINTSTRUCT地址

    );

     

    绘制文字

    int DrawText(

    HDC hDC, // handle to DC

     LPCTSTR lpString, // text to draw 输出的字符

    int nCount, // text length 字符大小

    LPRECT lpRect, // formatting dimensions 绘制矩形   左上右下两个点

    UINT uFormat // text-drawing options  绘制样式  比如居中,靠左对齐等

    );

    释放beginpaint产生的内存。如果不调用就会一直增加

    BOOL EndPaint(

    HWND hWnd, // handle to window

    CONST PAINTSTRUCT *lpPaint // paint data指向将接收的PAINTSTRUCT地址

    );

    人工产生绘制图案位置(无效区)

    HDC GetDC( HWND hWnd // handle to window);

    释放GetDC产生的内存。如果不调用就会一直增加

    int ReleaseDC(

    HWND hWnd, // handle to window

    HDC hDC // handle to DC );

    WM_PAINT 消息接受里面不能使用GetDC 会造成循环

    BeginPaint与GetDC的区别(使用效果相同)

    BeginPaint会清除无效区,GetDC不会

    BeginPaint/EndPaint通常只在WM_PAINT消息中使用.

    加载指定图标资源

    HICON LoadIcon(

     HINSTANCE hInstance, // handle to application instance  句柄实例

     LPCTSTR lpIconName // name string or resource identifier 图标资源选择

    );

    将图标绘制到指定环境中

    BOOL DrawIcon(

    HDC hDC, // handle to DC  

    int X, // x-coordinate of upper-left corner绘制x坐标

     int Y, // y-coordinate of upper-left corner 绘制y坐标

    HICON hIcon // handle to icon  绘制句柄

    );

    键盘消息WM_KEYDOWN

    LRESULT CALLBACK WindowProc(

     HWND hwnd,       // handle to window  

    UINT uMsg,       // WM_KEYDOWN

     WPARAM wParam,   // virtual-key code  虚拟键盘值 Windows统一了标准

    LPARAM lParam    // key data 扫描码  生产商给定的值

    );

     

    int wsprintf( 输出位置 ,格式 比如TEXT("%c") ,消息);

    //将keydown消息转换为字符消息

     

    这个函数帮我们实现了字符shift和capslk组合使用来完成大小写的转换

    BOOL TranslateMessage(

    CONST MSG *lpMsg // message information

    );

     

    keydown消息转换为字符消息 WM_CHAR

     

    学如逆水行舟,不进则退。 博客园技术交流群 群 号:1073255314 (本群没人,刚刚建立 -_-!!! )
  • 相关阅读:
    Day60
    Day53
    Day50
    Day49
    Day48
    Day47
    Day46(2)
    Day46(1)
    Day45
    Day44
  • 原文地址:https://www.cnblogs.com/Mj-NaijAm/p/13613082.html
Copyright © 2011-2022 走看看