吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4137|回复: 1
收起左侧

[其他转载] win程序设计笔记3

[复制链接]
zapline 发表于 2009-2-8 00:15
TextOut (hdc, x, y, psText, iLength) ;
TextOut中的x和y定义显示区域内字串的开始位置,x是水平位置,y是垂直位置。字串中第一个字元的左上角位於座标点(x,y)。在内定的装置内容中,原点(x和y均为0的点)是显示区域的左上角。如果在TextOut中将x和y设为0,则将从显示区域左上角开始输出字串。
psText参数是指向字串的指标,iLength是字串中字元的个数。如果psText指向Unicode字串,则字串中的位元组数就是iLength值的两倍。字串中不能包含任何ASCII控制字元(如回车、换行、制表或退格),Windows会将这些控制字元显示为实心块。Text0ut不识别作为字串结束标志的内容为零的位元组(对於Unicode,是一个短整数型态的0),而需要由nLength参数指明长度。

一般地,处理WM_PAINT讯息的形式如下:
case        WM_PAINT:
          hdc = BeginPaint (hwnd, &ps) ; 
                     ***
          EndPaint (hwnd, &ps) ;
          return 0 ;
如果不呼叫BeginPaint和EndPaint(或者ValIDAteRect),则Windows不会使该区域变为有效。相反,Windows将发送另一个WM_PAINT讯息,且一直发送下去。

PAINTSTRUCT结构:
typedef struct tagPAINTSTRUCT
{
          HDC              hdc ;
        BOOL               fErase ;
        RECT               rcPaint ;
        BOOL            fRestore ;
        BOOL            fIncUpdate ;
        BYTE            rgbReserved[32] ;
} PAINTSTRUCT ;


WNDCLASS结构的hbrBackground栏位指定的画刷来擦除背景,这个WNDCLASS结构是程式在WinMain初始化期间登录视窗类别时使用的。
许多Windows程式使用白色画刷。以下叙述设定视窗类别结构栏位值:
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

在处理WM_PAINT讯息时,为了在更新的矩形外绘图,可以使用如下呼叫:
InvalidateRect (hwnd, NULL, TRUE) ;

取得装置内容代号:方法二
要得到视窗显示区域的装置内容代号,可以呼叫GetDC来取得代号,在使用完後呼叫ReleaseDC:
hdc = GetDC (hwnd) ;
***
ReleaseDC (hwnd, hdc) ;

TEXTMETRIC结构有20个栏位,我们只使用前七个:
typedef struct tagTEXTMETRIC
{
        LONG tmHeight ;
        LONG tmAscent ;
        LONG tmDescent ;  
        LONG tmInternalLeading ;
        LONG tmExternalLeading ;
        LONG tmAveCharWidth ;
                     LONG tmMaxCharWidth ;
                    其他结构栏位
}TEXTMETRIC, * PTEXTMETRIC ;


要使用GetTextMetrics函式,需要先定义一个结构变数(通常称为tm):
TEXTMETRIC tm ;

在需要确定文字大小时,先取得装置内容代号,再呼叫GetTextMetrics:
hdc = GetDC (hwnd) ;
GetTextMetrics (hdc, &tm) ;
ReleaseDC (hwnd, hdc) ;

假设要编写一个Windows程序,在显示区域显示几行文字,这需要先取得字元宽度和高度。您可以在视窗讯息处理程式内定义两个变量来保存平均字元宽度(cxChar)和总的字元高度(cyChar):
static int cxChar, cyChar ;
如果变量在函数外面定义,则不需要定义为static

取得系统字体的字元宽度和高度的WM_CREATE程式码:
case WM_CREATE:
        hdc = GetDC (hwnd) ;
        GetTextMetrics (hdc, &tm) ;

        cxChar = tm.tmAveCharWidth ;
        cyChar = tm.tmHeight + tm.tmExternalLeading ;

        ReleaseDC (hwnd, hdc) ;
        return 0 ;
wsprintf与TextOut的组合:
TextOut (hdc, x, y, szBuffer,wsprintf (szBuffer, TEXT ("The sum of %i and %i is %i"), iA, iB, iA + iB)) ;

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| zapline 发表于 2009-2-8 00:41
书中本节例子
SYSMETS1.C
第84行错误
GetSystemMetrics (sysmetrics.iIndex))) ;
应为
GetSystemMetrics (sysmetrics.index))) ;
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:10

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表