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

(一)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 int         iLength ;          //字符串的长度
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 int swprintf(            //返回字符串的长度
2     wchar_t *buffer,            //将buffer指针指向format指针指向的字符串
3     const wchar_t *format       //格式化字符串输出
4     [, argument] ...            //可选参数
5 );

(二)TextOut函数实例应用

 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, int iCmdShow )
 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     return msg.wParam ;
48 }
49
50 /* 回调函数 */
51 LRESULT CALLBACK WndProc ( HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam )
52 {
53     static HDC      hdc ;
54     PAINTSTRUCT     ps ;
55     RECT            rect ;
56
57     TCHAR           szText [] = TEXT ("Hello World!") ;
58     static int      cxChar, 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     return DefWindowProc ( hwnd, umsg, wParam, lParam ) ;
86 }

运行结果:

代码说明:

(1)程序主要包含WinMain主函数与WndProc回调函数;

1 /* 主函数 */
2 int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
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 ) ;

原文地址:https://www.cnblogs.com/petrol/p/9784640.html

时间: 2024-10-08 09:33:08

C语言Windows程序开发—TextOut函数介绍【第02天】的相关文章

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

(一)CreateWindow函数的参数介绍: 1 HWND CreateWindow( 2 LPCTSTR lpClassName, //Windows窗口中预定义的控件结构体,包括:BUTTON(按钮),EDIT(文本框),LISTBOX(列表),MDICLIENT(子窗口),SCROLLBAR(滚动条),RICHEDIT(富文本),STATIC(静态控件): 3 LPCTSTR lpWindowName, //窗口控件中显示的内容,即Caption属性: 4 DWORD dwStyle,

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

(一)MessageBox函数的参数介绍: 1 int MessageBox ( 2 HWND hWnd, //弹出MessageBox对话框所属的窗口句柄 3 LPCTSTR lpText, //指向MessageBox对话框内容的字符串指针 4 LPCTSTR lpCaption, //指向MessageBox对话框标题的字符串指针 5 UINT uType //MessageBox对话框的风格 6 ) ; 函数调用示例: 1 MessageBox ( NULL, TEXT ("程序运行出错

MFC Windows程序开发究竟是什么?

MFC Windows程序开发究竟是什么? MFC是一个Application Framework.他是一个完整的程序模型. 什么是MFC?MFC是微软公司出品一个Application Framework.基本上,我们可以认为Application Framework就是一个完整的程序模型,具备标准软件所需的一切基本功能,比如文件存取.打印等等.从C++语言层面来看,Application Framework就是有一整套组合好的“对象”构建起来的模型.从C++语法上来说,MFC就是一套微软提供

Windows程序开发的背景知识---Windows消息机制

一,消息 消息(Message)指的就是Windows 操作系统发给应用程序的一个通知,它告诉应用程序某个特定的事件发生了.比如,用户单击鼠标或按键都会引发Windows 系统发送相应的消息.最终处理消息的是应用程序的窗口函数,如果程序没处理的话操作系统有默认函数将会作出处理.      从数据结构的角度来说,消息是一个结构体,它包含了消息的类型标识符以及其他的一些附加信息.系统定义的结构体MSG用于表示消息,MSG 具有如下定义形式: typedef struct MSG {      HWN

Windows程序开发必须知道的几个注册表项

1.Windows服务程序列表位置 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 2.卸载程序列表位置 32位系统 当前用户软件HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 所有用户软件HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 64位系统 当前用

windows程序开发窗口截图实现一

1.2编写窗口截图 本次选择窗口截图一共3步:鼠标按下.移动.弹起. 知识点:改变鼠标图标.截图函数封装.窗口画图 本节新学习AIP: LoadCursor SetCursor(m_hCursor); SetCapture(); CreateDC CreateCompatibleDC CreateCompatibleBitmap ClientToScreen WindowFromPoint CreateSolidBrush FrameRect -------------.. 视频观看地址: ht

【转】C语言mem.h中的函数介绍

函数名称:     memccpy函数原型:     void *memccpy(void *dest, const void *src, int c, size_t n)函数功能:     字符串拷贝,到指定长度或遇到指定字符时停止拷贝函数返回:参数说明:     src-源字符串指针,c-中止拷贝检查字符,n-长度,dest-拷贝底目的字符串指针所属文件:     string.h,mem.h #include string.h#include stdio.hint main(){    c

R语言爬虫:Rvest包函数介绍

Rvest 包中常用函数一览: 函数 作用 read_html() 读取 html 页面 html_nodes() 提取所有符合条件的节点 html_node() 返回一个变量长度相等的list,相当于对html_nodes()取[[1]]操作 html_table() 获取 table 标签中的表格,默认参数trim=T,设置header=T可以包含表头,返回数据框 html_text() 提取标签包含的文本,令参数trim=T,可以去除首尾的空格 html_attrs(nodes) 提取指定

【API】Windows 程序提升权限函数

BOOL EnableShutdownPrivilege() { HANDLE hProcess = NULL; HANDLE hToken = NULL; LUID uID = {0}; TOKEN_PRIVILEGES stToken_Privileges = {0}; hProcess = ::GetCurrentProcess(); //获取当前应用程序进程句柄 if(!::OpenProcessToken(hProcess,TOKEN_ADJUST_PRIVILEGES,&hToken