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

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

函数调用示例:

 TextOut ( hdc, , , TEXT ("Hello World!"),  ) ;

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

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

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

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

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

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

变量声明:

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

函数调用:

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

swprintf函数的参数介绍:

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

(二)TextOut函数实例应用

 #include <windows.h>

 /* 声明回调函数 */
LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM ) ; int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow )
{
static TCHAR szAppName[] = TEXT ( "myTextOut" ) ;
HWND hwnd ;
MSG msg ;
WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; //窗口样式
wndclass.lpfnWndProc = WndProc ; //窗口的回调函数
wndclass.hInstance = hInstance ; //窗口实例句柄
wndclass.cbClsExtra = ; //窗口结构体扩展:无
wndclass.cbWndExtra = ; //窗口实例扩展:无
wndclass.hbrBackground = ( HBRUSH ) GetStockObject ( WHITE_BRUSH ) ; //窗口背景颜色:白色
wndclass.hIcon = LoadIcon ( NULL, IDI_APPLICATION ) ; //窗口图标
wndclass.hCursor = LoadCursor ( NULL, IDC_ARROW ) ; //窗口中的鼠标样式
wndclass.lpszClassName = szAppName ; //窗口结构体名称
wndclass.lpszMenuName = NULL ; //主菜单名称:无 if ( !RegisterClass ( &wndclass ) )
{
MessageBox ( NULL, TEXT ("无法注册窗口类!"), TEXT ("错误"), MB_OK | MB_ICONERROR ) ;
} /* 创建窗口 */
hwnd = CreateWindow ( szAppName, TEXT ("输出字符串演示"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL ) ; /* 显示与更新窗口 */
ShowWindow ( hwnd, iCmdShow ) ;
UpdateWindow (hwnd) ; /* 从消息队列中获取消息 */
while ( GetMessage ( &msg, NULL, , ) )
{
TranslateMessage ( &msg ) ; //将虚拟键消息转换为字符消息
DispatchMessage ( &msg ) ; //分发到回调函数
} return msg.wParam ;
} /* 回调函数 */
LRESULT CALLBACK WndProc ( HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam )
{
static HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ; TCHAR szText [] = TEXT ("Hello World!") ;
static int cxChar, cyChar ; switch ( umsg )
{
case WM_CREATE : //处理窗口创建成功后发来的消息
cxChar = LOWORD (GetDialogBaseUnits ()); //获得窗口中内定字体字元宽度(低字组)
cyChar = HIWORD (GetDialogBaseUnits ()); //或得窗口中内定字体字元高度(高字组)
return ; case WM_PAINT: //处理窗口产生无效区域时发来的消息
hdc = BeginPaint ( hwnd, &ps ) ; GetClientRect ( hwnd, &rect ) ; //获取窗口的矩形区域
TextOut ( hdc,
rect.right / - cxChar * lstrlen ( szText ) / , //使字符串在窗口中水平居中
( rect.bottom - cyChar ) / , //使字符串在窗口中垂直居中
szText, //字符串的内容
lstrlen ( szText ) //lstrlen函数获取字符串的长度
) ;
EndPaint ( hwnd, &ps ) ;
return ; case WM_DESTROY: //处理窗口关闭时发来的消息
PostQuitMessage () ;
return ;
} return DefWindowProc ( hwnd, umsg, wParam, lParam ) ;
}

运行结果:

代码说明:

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

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

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

 WNDCLASS        wndclass ;          //声明窗口结构体

 wndclass.style              = CS_HREDRAW | CS_VREDRAW ;                         //窗口样式
wndclass.lpfnWndProc = WndProc ; //窗口的回调函数
wndclass.hInstance = hInstance ; //窗口实例句柄
wndclass.cbClsExtra = ; //窗口结构体扩展:无
wndclass.cbWndExtra = ; //窗口实例扩展:无
wndclass.hbrBackground = ( HBRUSH ) GetStockObject ( WHITE_BRUSH ) ; //窗口背景颜色:白色
wndclass.hIcon = LoadIcon ( NULL, IDI_APPLICATION ) ; //窗口图标
wndclass.hCursor = LoadCursor ( NULL, IDC_ARROW ) ; //窗口中的鼠标样式
wndclass.lpszClassName = szAppName ; //窗口结构体名称
wndclass.lpszMenuName = NULL ; //主菜单名称:无
/* 注册窗口结构体 */
if ( !RegisterClass ( &wndclass ) )
{
MessageBox ( NULL, TEXT ("无法注册窗口类!"), TEXT ("错误"), MB_OK | MB_ICONERROR ) ;
}

<2>窗口创建与显示

 /* 创建窗口 */
hwnd = CreateWindow ( szAppName, TEXT ("输出字符串演示"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL ) ; /* 显示与更新窗口 */
ShowWindow ( hwnd, iCmdShow ) ;
UpdateWindow (hwnd) ;

<3>消息获取

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

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

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

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

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

 hdc = BeginPaint ( hwnd, &ps ) ;

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

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

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

    (一)CreateWindow函数的参数介绍: HWND CreateWindow( LPCTSTR lpClassName, //Windows窗口中预定义的控件结构体,包括:BUTTON(按钮), ...

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

    (一)MessageBox函数的参数介绍: int MessageBox ( HWND hWnd, //弹出MessageBox对话框所属的窗口句柄 LPCTSTR lpText, //指向Messa ...

  3. C语言Windows程序开发—Windows窗口样式与常用控件样式【第04天】

    (一)Windows窗口(MDICLIENT)样式介绍 /* Windows窗口样式 */ WS_BORDER //带有边框的窗口 WS_CAPTION //带有标题栏的窗口 WS_CHILD //子 ...

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

    MFC Windows程序开发究竟是什么? MFC是一个Application Framework.他是一个完整的程序模型. 什么是MFC?MFC是微软公司出品一个Application Framew ...

  5. Loadrunner 脚本开发-soap_request函数介绍及WebService接口测试

    脚本开发- soap_request函数介绍及WebService接口测试 by:授客 QQ:1033553122 函数介绍 soap_request 函数执行一个SOAP请求 函数原型 int so ...

  6. Go语言Windows 10开发环境搭建:Eclipse+GoClipse

    Intel Core i5-8250U,Windows 10家庭中文版,go version go1.11 windows/amd64, Eclipse IDE for C/C++ Developer ...

  7. 第十三章:MFC库与Windows程序开发概述

    主要内容: 1.Windows程序的基本结构 2.MFC库简介 3.使用Visual C++开发Windows程序 具体内容略

  8. R语言爬虫:Rvest包函数介绍(表格)

    Rvest 包中常用函数一览: 函数 作用 read_html() 读取 html 页面 html_nodes() 提取所有符合条件的节点 html_node() 返回一个变量长度相等的list,相当 ...

  9. Windows驱动开发-派遣函数

    一个简单的派遣函数格式 NTSTATUS DispatchFunction(PDEVICE_OBJECT pDeviceObject, PIRP pIrp) { //业务代码区 //设置返回状态 pI ...

随机推荐

  1. nagios外部命令接口

    http://nagios.manubulon.com/traduction/docs14en/extcommands.html https://old.nagios.org/developerinf ...

  2. 到底哪种类型的错误信息会阻止business transaction的保存

    当试图在CRM WebUI保存一个business transaction比如Opportunity时,可能会遇到各种各样的错误消息.有的错误消息会阻止Business transaction被sav ...

  3. Jmeter启动报错:unable to access jarfile ApacheJmeter.jar error 原因:下载的src包没有这个jar包,需下载binary包

    安装好jdk并配置了环境变量,下载Jmeter包解压启动jemter.bat提示 unable to access jarfile ApacheJmeter.jar error 原因: 从官网 htt ...

  4. kill 使用当前数据库的所有session

    --在维护中经常需要将某一数据库所有进程都杀掉,手工杀有点太费事.写了一个存储过程 --usage:proc_kill 'PSADBA' create proc proc_kill(@db varch ...

  5. python:序列与模块

    一,序列化模块 什么叫序列化——将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就 ...

  6. CF578C Weakness and Poorness

    嘟嘟嘟 题面:给一个序列中的,每一个数都减去一个实数x,使得到的新序列的max(最大连续和,|最小连续和|)最小.(|ai| <= 10000) 感性的想想,会发现最大连续和随x变大而变小,最小 ...

  7. 2018.10.7 理解Hibernate的工作原理及其中的ORM详解

    复习 hibernate框架 简介j及其搭建: hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库. 1 ...

  8. 2017.9.11 初入HTML学习

          第二章 静态网页开发技术 静态网页是指可以由浏览器解释执行而生成的网页,HTML是一组标签,负责网页的基本表现形式: JavaScript是在客户端浏览器运行的语言,负责在客户端与用户的互 ...

  9. java中equals以及==的用法(简单介绍)

    简单介绍 equals方法是java.lang.Object类的方法 有两种用法说明: 一.对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同. 1.“==”比较两 ...

  10. MVC学习四:Razor视图语法

    @{ Layout = null; } <hr /> <!DOCTYPE html> @this.GetType().Assembly.Location.ToString() ...