zoukankan      html  css  js  c++  java
  • Windows程序设计笔记(4)

    设备描述表
    1.在WM_PAINT消息时
    PAINTSTRUCT ps;
    HDC hdc = BeginPaint(hwnd,&ps);
    EndPaint(hwnd,&ps);

    PAINTSTRUCT中包含一个rcPaint的矩形结构,定义为包含窗口客户区的无效范围矩形
    2.非WM_PAINT消息时
    2.1
    hdc=GetDC(hwnd);    //整个绘图区的句柄
    ReleaseDC(hwnd,hdc);
    不使客户区任何可能的无效区域变为有效  (不刷新窗口显示?)
    2.2适用于整个窗口,而非客户区,必须捕获WM_NCPAINT消息
    hdc=GetWindowDC(hwnd);
    ReleaseDC(hwnd,hdc);

    3.获取整个屏幕的设备描述表
    以上2种方式获得的句柄都和某个窗口有关,而想获取整个屏幕的设备描述句柄则应使用
    hdc = CreateDC(pszDriver,pszDevice,pszOutput,pData);
    DeleteDC(hdc);

    4.内存设备描述表
    hdcmem = CreateCompatibleDC(hdc);
    DeleteDC(hdcmem);

    5.元文件设备描述表
    hdcMeta = CreateMetaFile(pszfilename);
    hmf = CloseMetaFile(hdcMeta);

    获取设备描述表信息
    GetDeviceCaps(hdc, index);

    水平/垂直大小(mm) = 25.4 * 水平/垂直分辨率(像素) / 逻辑像素X/Y(每英寸的点数)
    25.4用于将英寸转为mm


    6种GDI对象:
    画笔,刷子,位图,区域,字体,调色板. 这些对象都是通过SelectObject选进设备描述表的.在使用时应遵守以下三条原则:
    1.最后要删除自己创建的所有GDI对象
    2.当GDI对象正在一个有效的设备描述表中时,不要删除它
    3.不要删除现有对象

    背景模式OPAQUE,TRANSPARENT(忽略背景色,且不填充空隙)

    逻辑坐标和设备坐标
    ClientToScreen()  ScreenToClient() 客户区坐标与屏幕坐标的转换
    GetWindowRect获取屏幕坐标下的整个窗口的位置和大小

    Viewport和Windowport
    GetClientRect()获取客户区大小  
    DPToLP() 设备点转逻辑点
    LPToDP() 逻辑点转设备点

    注:在改变viewport或者windowport后并不能立即刷新显示输出,而必须在改变原点之后刷新输出



  • 相关阅读:
    bootstap 折叠
    AtCoder AGC019E Shuffle and Swap (DP、FFT、多项式求逆、多项式快速幂)
    Codeforces Gym 101630J Journey from Petersburg to Moscow (最短路)
    BZOJ 4042 Luogu P4757 [CERC2014]Parades (树形DP、状压DP)
    BZOJ 2734 [HNOI2012]集合选数 (状压DP、时间复杂度分析)
    BZOJ 2759 一个动态树好题 (LCT)
    Codeforces 1205C Palindromic Paths (交互题、DP)
    getopt实现传参自动识别
    powershell笔记
    bat语法需要注意的地方
  • 原文地址:https://www.cnblogs.com/neking/p/2534698.html
Copyright © 2011-2022 走看看