windows编程学习笔记之基础文字显示

在win中的窗口上进行文字显示:

有以下几个基本概念:

消息:

WM_PAINT:

在有无效区域时发送该消息,优先级比较低,有时看到一个显示的白的窗口就是因为该消息不能及时得到响应造成的。可以使用在窗口无效的函数后使用UpdateWindow (hwnd) ;函数使应用程序对其立即做出响应

WM_CREATE:

在创建窗口时响应的第一个消息。

WM_SIZE

在窗口大小改变时发出该消息,并且在lParam参数的低字组中包含显示区域的宽度,高字组中包含显示区域的高度。
    cxClient = LOWORD (lParam) ;
    cyClient = HIWORD (lParam) ;

WM_VSCROLL

WM_HSCROLL

wParam消息参数被分为一个低字组和一个高字组。wParam的低字组是一个数值,它指出了鼠标对滚动条进行的操作。这个数值被看作一个「通知码」。通知码的值由以SB(代表「scroll bar(滚动条)」)开头的标识符定义。以下是在WINUSER.H中定义的通知码:

#define SB_LINEUP             0
        
#define SB_LINELEFT           0
        
#define SB_LINEDOWN           1
        
#define SB_LINERIGHT          1
        
#define SB_PAGEUP             2
        
#define SB_PAGELEFT           2
        
#define SB_PAGEDOWN           3
        
#define SB_PAGERIGHT          3
        
#define SB_THUMBPOSITION      4
        
#define SB_THUMBTRACK         5
        
#define SB_TOP                6
        
#define SB_LEFT               6
        
#define SB_BOTTOM             7
        
#define SB_RIGHT              7
        
#define SB_ENDSCROLL          8

结构体:

绘图信息结构

前面提到过,Windows为每个窗口保存一个「绘图信息结构」,这就是PAINTSTRUCT,定义如下:

typedef struct tagPAINTSTRUCT
        
{
        
    HDC           hdc ;
        
    BOOL      fErase ;
        
    RECT      rcPaint ;
        
    BOOL          fRestore ;
        
    BOOL          fIncUpdate ;
        
    BYTE          rgbReserved[32] ;
        
} PAINTSTRUCT ;
 
typedef struct tagTEXTMETRIC
        
{
        
    LONG tmHeight ;
        
    LONG tmAscent ;
        
    LONG tmDescent ;
        
    LONG tmInternalLeading ;
        
    LONG tmExternalLeading ;
        
    LONG tmAveCharWidth ;
        
   LONG tmMaxCharWidth ;
        
           其它结构字段
        
}
        
TEXTMETRIC, * PTEXTMETRIC ;
        
typedef struct tagSCROLLINFO
        
{
        
    UINT cbSize ;// set to sizeof (SCROLLINFO)
        
    UINT fMask ;  // values to set or get
        
    int  nMin ;      // minimum range value
        
    int  nMax ;   // maximum range value
        
    UINT nPage ;  // page size
        
    int  nPos ;   // current position
        
    int  nTrackPos ;// current tracking position
        
}
        
SCROLLINFO, * PSCROLLINFO ;

函数:

TextOut (hdc, x, y, psText, iLength) ;

InvalidateRect使显示区域内的矩形无效

GetUpdateRect,可以在任何时候取得这些坐标

ValidateRect函数使显示区域内的任意矩形区域变为有效

 

获得设备句柄,在响应WM_PAINT中响应

hdc = BeginPaint (hwnd, &ps) ;
         EndPaint (hwnd, &ps) ;
可以使之前的无效区域变为有效。

hdc = GetDC (hwnd) ;
使用GDI函数
ReleaseDC (hwnd, hdc) ;

GetTextMetrics (hdc, &tm) ;

wsprintf (szBuffer, TEXT ("The sum of %i and %i is %i"),
       
                    iA, iB, iA + iB)) ;

GetSystemMetrics

 

SetTextAlign (hdc, TA_RIGHT | TA_TOP) ;

SetScrollRange、SetScrollPos、GetScrollRange和GetScrollPos

SetScrollInfo (hwnd, iBar, &si, bRedraw) ;
GetScrollInfo (hwnd, iBar, &si) ;
       

你可能感兴趣的:(编程,windows,struct,byte,scroll)