C语言Windows程序开发—TextOut函数介绍【第02天】

摘要:
(一)TextOut函数的参数介绍:1BOOLTextOut;函数调用示例:1TextOut(hdc,20,20,TEXT("HelloWorld!RegisterClass)25{26MessageBox(NULL,TEXT("无法注册窗口类!

(一)TextOut函数的参数介绍:

1 BOOL TextOut (                  //如果函数调用成功,返回TRUE,否则,返回FALSE
2     HDC         hdc,            //用于显示字符串的控件ID
3     int         nXStart,        //字符串所在起始位置左上角(X,Y)的X坐标
4     int         nYStart,        //字符串所在起始位置左上角(X,Y)的Y坐标
5     LPCTSTR     lpString,       //显示的字符串内容
6     int         cbString        //字符串长度
7 ) ;

函数调用示例:

1 TextOut ( hdc, 20, 20, TEXT ("Hello World!"), 12 ) ;

第1个参数:表示显示字符串的控件ID;

第2个参数:表示字符串所在起始位置左上角(x,y)的x值为20;

第3个参数:表示字符串所在起始位置左上角(x,y)的y值为20;

第4个参数:表示字符串内容“Hello World!”;

第5个参数:表示字符串“Hello World!”长度为12;

wsprintf函数与TextOut函数的经典组合:

变量声明:

1 intiLength ;          //字符串的长度
2 TCHAR       szBuffer [1024] ;     //临时变量szBuffer,可以存储最大字符个数为1024

函数调用:

1 iLength = wsprintf ( szBuffer,                      //将szBuffer指针指向字符串“The sum of %i and %i is %i”的地址
2             TEXT ("The sum of %i and %i is %i"), iA, iB, iA + iB ) ;    //返回字符串长度为20 + (iA,iB,iA+iB)这3个数所占的字符长度
3 TextOut = ( hdc, x, y, szBuffer, iLength ) ;        //在指定起始位置(x,y)输出字符串szBuffer

swprintf函数的参数介绍:

1 intswprintf(            //返回字符串的长度
2     wchar_t *buffer,            //将buffer指针指向format指针指向的字符串
3     const wchar_t *format       //格式化字符串输出
4     [, argument] ...            //可选参数
5 );

(二)TextOut函数实例应用

C语言Windows程序开发—TextOut函数介绍【第02天】第1张C语言Windows程序开发—TextOut函数介绍【第02天】第2张
1 #include <windows.h>
2 
3 /*声明回调函数 */
4 LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ) ;
5 
6 int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, intiCmdShow )
7 {
8     static TCHAR    szAppName[] = TEXT ( "myTextOut") ;
9 HWND            hwnd ;
10 MSG             msg ;
11 WNDCLASS        wndclass ;
12 
13     wndclass.style              = CS_HREDRAW | CS_VREDRAW ;                         //窗口样式
14     wndclass.lpfnWndProc        = WndProc ;                                         //窗口的回调函数
15     wndclass.hInstance          = hInstance ;                                       //窗口实例句柄
16     wndclass.cbClsExtra         = 0 ;                                               //窗口结构体扩展:无
17     wndclass.cbWndExtra         = 0 ;                                               //窗口实例扩展:无
18     wndclass.hbrBackground      = ( HBRUSH ) GetStockObject ( WHITE_BRUSH ) ;       //窗口背景颜色:白色
19     wndclass.hIcon              = LoadIcon ( NULL, IDI_APPLICATION ) ;              //窗口图标
20     wndclass.hCursor            = LoadCursor ( NULL, IDC_ARROW ) ;                  //窗口中的鼠标样式
21     wndclass.lpszClassName      = szAppName ;                                       //窗口结构体名称
22     wndclass.lpszMenuName       = NULL ;                                            //主菜单名称:无
23 
24     if ( !RegisterClass ( &wndclass ) )
25 {
26         MessageBox ( NULL, TEXT ("无法注册窗口类!"), TEXT ("错误"), MB_OK |MB_ICONERROR ) ;
27 }
28 
29     /*创建窗口 */
30     hwnd = CreateWindow (   szAppName, TEXT ("输出字符串演示"),
31 WS_OVERLAPPEDWINDOW,
32 CW_USEDEFAULT, CW_USEDEFAULT,
33 CW_USEDEFAULT, CW_USEDEFAULT,
34 NULL, NULL, hInstance, NULL ) ;
35     
36     /*显示与更新窗口 */
37 ShowWindow ( hwnd, iCmdShow ) ;
38 UpdateWindow (hwnd) ;
39 
40     /*从消息队列中获取消息 */
41     while ( GetMessage ( &msg, NULL, 0, 0) )
42 {
43         TranslateMessage ( &msg ) ;         //将虚拟键消息转换为字符消息
44         DispatchMessage ( &msg ) ;          //分发到回调函数
45 }
46 
47     returnmsg.wParam ;
48 }
49 
50 /*回调函数 */
51 LRESULT CALLBACK WndProc ( HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam )
52 {
53     staticHDC      hdc ;
54 PAINTSTRUCT     ps ;
55 RECT            rect ;
56 
57     TCHAR           szText [] = TEXT ("Hello World!") ;
58     static intcxChar, cyChar ;
59 
60     switch( umsg )
61 {
62     case WM_CREATE :        //处理窗口创建成功后发来的消息
63         cxChar = LOWORD (GetDialogBaseUnits ());    //获得窗口中内定字体字元宽度(低字组)
64         cyChar = HIWORD (GetDialogBaseUnits ());    //或得窗口中内定字体字元高度(高字组)
65         return 0;
66         
67     case WM_PAINT:          //处理窗口产生无效区域时发来的消息
68         hdc = BeginPaint ( hwnd, &ps ) ;
69 
70         GetClientRect ( hwnd, &rect ) ;     //获取窗口的矩形区域
71 TextOut (   hdc, 
72                     rect.right / 2 - cxChar * lstrlen ( szText ) / 2,       //使字符串在窗口中水平居中
73                     ( rect.bottom - cyChar ) / 2,                           //使字符串在窗口中垂直居中
74                     szText,                     //字符串的内容
75                     lstrlen ( szText )          //lstrlen函数获取字符串的长度
76 ) ;
77         EndPaint ( hwnd, &ps ) ;
78         return 0;
79 
80     case WM_DESTROY:        //处理窗口关闭时发来的消息
81         PostQuitMessage (0) ;
82         return 0;
83 }
84 
85     returnDefWindowProc ( hwnd, umsg, wParam, lParam ) ;
86 }
View Code

运行结果:

C语言Windows程序开发—TextOut函数介绍【第02天】第3张

代码说明:

(1)程序主要包含WinMain主函数与WndProc回调函数;
1 /*主函数 */
2 int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, intiCmdShow )
3 
4 /*回调函数 */
5 LRESULT CALLBACK WndProc ( HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam )

(2)在WinMain主函数中,主要实现窗口结构体的声明与属性赋值,窗口结构体注册,以及窗口的创建、显示和消息获取;

<1>窗口结构体的声明、属性赋值与注册

1 WNDCLASS        wndclass ;          //声明窗口结构体
2 
3 wndclass.style              = CS_HREDRAW | CS_VREDRAW ;                         //窗口样式
4 wndclass.lpfnWndProc        = WndProc ;                                         //窗口的回调函数
5 wndclass.hInstance          = hInstance ;                                       //窗口实例句柄
6 wndclass.cbClsExtra         = 0 ;                                               //窗口结构体扩展:无
7 wndclass.cbWndExtra         = 0 ;                                               //窗口实例扩展:无
8 wndclass.hbrBackground      = ( HBRUSH ) GetStockObject ( WHITE_BRUSH ) ;       //窗口背景颜色:白色
9 wndclass.hIcon              = LoadIcon ( NULL, IDI_APPLICATION ) ;              //窗口图标
10 wndclass.hCursor            = LoadCursor ( NULL, IDC_ARROW ) ;                  //窗口中的鼠标样式
11 wndclass.lpszClassName      = szAppName ;                                       //窗口结构体名称
12 wndclass.lpszMenuName       = NULL ;                                            //主菜单名称:无
13 /*注册窗口结构体 */
14 if ( !RegisterClass ( &wndclass ) )
15 {
16     MessageBox ( NULL, TEXT ("无法注册窗口类!"), TEXT ("错误"), MB_OK |MB_ICONERROR ) ;
17 }

<2>窗口创建与显示

1 /*创建窗口 */
2 hwnd = CreateWindow (   szAppName, TEXT ("输出字符串演示"),
3 WS_OVERLAPPEDWINDOW,
4 CW_USEDEFAULT, CW_USEDEFAULT,
5 CW_USEDEFAULT, CW_USEDEFAULT,
6 NULL, NULL, hInstance, NULL ) ;
7     
8 /*显示与更新窗口 */
9 ShowWindow ( hwnd, iCmdShow ) ;
10 UpdateWindow (hwnd) ;

<3>消息获取

1 /*从消息队列中获取消息 */
2 while ( GetMessage ( &msg, NULL, 0, 0) )
3 {
4     TranslateMessage ( &msg ) ;         //将虚拟键消息转换为字符消息
5     DispatchMessage ( &msg ) ;          //分发到回调函数
6 }

(3)在WndProc回调函数中,主要对Windows发来的消息进行处理,获取字体的宽度与高度,设置字符串显示的位置,显示字符串。

<1>获取字体的宽度与高度

1 cxChar = LOWORD (GetDialogBaseUnits ());    //获得窗口中内定字体字元宽度(低字组)
2 cyChar = HIWORD (GetDialogBaseUnits ());    //或得窗口中内定字体字元高度(高字组)

<2>设置字符串显示的位置并显示字符串

1 hdc = BeginPaint ( hwnd, &ps ) ;
2 
3 GetClientRect ( hwnd, &rect ) ;     //获取窗口的矩形区域
4 TextOut (   hdc, 
5             rect.right / 2 - cxChar * lstrlen ( szText ) / 2,       //使字符串在窗口中水平居中
6             ( rect.bottom - cyChar ) / 2,                           //使字符串在窗口中垂直居中
7             szText,                     //字符串的内容
8             lstrlen ( szText )          //lstrlen函数获取字符串的长度
9 ) ;
10 EndPaint ( hwnd, &ps ) ;

免责声明:文章转载自《C语言Windows程序开发—TextOut函数介绍【第02天】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【Oracle11g】06_网络配置aspose授权亲测可用配套代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C语言使用正则表达式

http://blog.chinaunix.net/uid-479984-id-2114941.html C语言使用正则表达式 据说一个好的程序员是会使用DB和Regular Expression的程序员,可见两者是多么重要。正则表达式是能极大地提高工作效率的工具,使用过Linux下各种具备RE特性的工具的人一定对此深 有感触。很多语言都支持RE,用的最多...

iOS开发 字符串

iOS开发之玩转字符串 (转)这是另一个收藏的超链接 来自SegmentFault 大神的精品 下面这是一些常用的方法和属性 记得不牢所以收藏下 //一、NSString /*----------------创建字符串的方法----------------*///1、创建常量字符串。NSString *astring = @"This is a Strin...

黄聪:PHP字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、切割成数组等)

一、字符串替换 str_replace("iwind", "kiki", "i love iwind, iwind said"); 将输出 "i love kiki, kiki said" str_replace(find,replace,string,count)参数 描述  find 必需。规定要查找的值。 replace 必需。规定替换 find...

Sqlserver 2014 之 自定义字符串聚合函数

Sqlserver 2014 之 自定义字符串聚合函数 最近做的一个HR项目需要同时支持两种数据库(Postgresql and Sqlserver 2014)但是有一个问题困扰了我,就项目中需要在group 中去聚合一些字符串。 在postgresql 中可以使用内部函数string_agg(filedName, 分割符) 来实现,但是sqlserver...

Awk命令

一. AWK入门指南 Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务。本章是个入门指南,让你能够尽快地开始编写你自己的程序。第二章将描述整个语言,而剩下的章节将向你展示如何使用Awk来解决许多不同方面的问题。纵观全书,我们尽量选择了一些对你有用、有趣并且有指导意义的实例。 1.1 起步 有用的awk程序往往很简短,仅仅一两...

oracle 在sql中显示blob的字符串

最近在用oracle的过程中用到了对blob字段模糊查询的问题,对oracle来说,我并不是高手,找了很多的资料终于能够查出来了。blob字段直接用 select * from table_name where column like ‘%%’查找的时候是不能实现的 ,主要是字段类型不符,就想到了字段转换成varchar2类型,然后再进行查询select...