API文本输出2

来源:互联网 发布:java 打印hashmap 编辑:程序博客网 时间:2024/05/29 12:31

#include<windows.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain
(
 HINSTANCE hInstance,
 HINSTANCE HPrevInst,
 LPSTR lpszCmdLine,
 int nCmdShow
 )
{
 HWND hwnd;
 MSG Msg;
 WNDCLASS wndclass;
 char lpszClassName[]="文本输出";
 char lpszTitle[]="EXAMPLE FOR THE TEXT OUTPUT";
 wndclass.style=0;
 wndclass.lpfnWndProc=WndProc;
 wndclass.cbClsExtra=0;
 wndclass.cbWndExtra=0;
 wndclass.hInstance=hInstance;
 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
 wndclass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH));
 wndclass.lpszClassName=lpszClassName;
 wndclass.lpszMenuName=NULL;

 if(!RegisterClass(&wndclass))
 {
  MessageBeep(0);
  return FALSE;
 }
 hwnd=CreateWindow
  (
  lpszClassName,
  lpszTitle,
  WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  NULL,
  NULL,
  hInstance,
  NULL
  );

ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);


while(GetMessage(&Msg,NULL,0,0))
{
 TranslateMessage(&Msg);
 DispatchMessage(&Msg);
}

return Msg.wParam;
}

LRESULT CALLBACK WndProc
(
 HWND hwnd,
 UINT message,
 WPARAM wParam,
 LPARAM lParam
 )
{
 HDC hdc;
 HFONT hF_black,hF_big;//定义两种字体句柄
 PAINTSTRUCT ps;
 TEXTMETRIC tm;//定义一个TEXTMETRIC结构,用以记录字体信息
 char lpsz_1[]="这是一行红色的、字体为SYSTEM_FONT的文字,红色代表未来。";
 char lpsz_2[]="现在显示的是自定义字体,颜色为绿色,绿色代表生机勃勃。";
 char lpsz_3[]="现在展现在你面前的是蓝色的粗体字,蓝色代表广阔的海洋和天空。";
 char lpsz_4[]="当前字体为大号、斜体并带有下划线的文字。";
 char lpsz_5[]="现在你掌握了字体的操作了吗?";
 char lpsz_6[]="祝你成功";


 int X=0,Y=0;
 SIZE size;               //定义一个SIZE类型的结构

 switch(message){
 case WM_PAINT:
  hdc=BeginPaint(hwnd,&ps);
  SetTextColor(hdc,RGB(255,0,0));   //设置文本颜色为红色
  GetTextMetrics(hdc,&tm);//设置默认字体,写入tm结构中
  TextOut(hdc,X,Y,lpsz_1,strlen(lpsz_1));//使用当前字体输出文本
  Y=Y+tm.tmHeight+100*tm.tmExternalLeading;//计算换行时下一行文本的输出坐标

  //创建自定义字体
  hF_black=CreateFont
   (
   20,            //字体的宽度
   0,             //由系统根据高度比选取字体最佳宽度值
   0,             //文本的倾斜度为0,表示水平
   0,             //字体的倾斜度为0
   FW_HEAVY,       //字体的粗度,FW_HEAVY为最粗
   0,              //非斜体字
   0,              //无下划线
   0,               //无删除线
   ANSI_CHARSET,     //表示所用的字符集为ANSI_CHARSET
   OUT_DEFAULT_PRECIS,   //输出精度为默认精度
   CLIP_DEFAULT_PRECIS,   //剪裁精度为默认精度
   DEFAULT_QUALITY,       //输出质量为默认值
   DEFAULT_PITCH|FF_DONTCARE,     //字体距和字体系列使用默认值
   "粗体字"                        //字体名称
   );


  SetTextColor(hdc,RGB(0,255,0));//设置文本颜色为绿色
  SelectObject(hdc,hF_black);    //将自定义字体选入设备描述表
  GetTextMetrics(hdc,&tm);//获取字体的消息,并写入tm结构中

  TextOut(hdc,X,Y,lpsz_2,strlen(lpsz_2));//使用当前字体输出文本
  //换行继续输出文本,计算新行的起始Y坐标位置
  Y=Y=tm.tmHeight+10*tm.tmExternalLeading;
  GetTextExtentPoint32(hdc,lpsz_2,strlen(lpsz_2),&size);//获取字符串的宽度

  SetTextColor(hdc,RGB(0,0,255));//设置文本颜色为蓝色
  TextOut(hdc,X,Y,lpsz_3,strlen(lpsz_3));//用当前字体输出文本
  X=0;                         //计算下一行文本的输出起始坐标

  Y=Y+tm.tmHeight+20*tm.tmExternalLeading;
  hF_big=CreateFont                        //引入新字体
   (
   30,                  //字体高度
   0,
   0,
   0,
   FW_NORMAL,
   1,                    //定义斜体
   1,                    //定义输出时带下划线
   0,
   ANSI_CHARSET,
   OUT_DEFAULT_PRECIS,
   CLIP_DEFAULT_PRECIS,
   DEFAULT_QUALITY,
   DEFAULT_PITCH|FF_DONTCARE,
   "大号字"
   );

  SelectObject(hdc,hF_big);//将第二种自定义字体选入设备描述表
  SetTextColor(hdc,RGB(155,155,155));//设置文本颜色为灰色
  Y=Y+tm.tmHeight+20*tm.tmExternalLeading;
  TextOut(hdc,X,Y,lpsz_4,strlen(lpsz_4));//以当前字体输出文本
  SetTextColor(hdc,RGB(255,0,0));//设置文本颜色为红色
  X=0;                     //设定输出文本的X坐标位置
  Y=Y+tm.tmHeight+30*tm.tmExternalLeading;
  TextOut(hdc,X,Y,lpsz_5,strlen(lpsz_5));//输出文本
  //在该行继续输出文本
  GetTextExtentPoint32(hdc,lpsz_5,strlen(lpsz_5),&size);//获取字符串的宽度
  X=X+size.cx;             //获取起始坐标
  TextOut(hdc,X,Y,lpsz_6,strlen(lpsz_6));//输出文本

  EndPaint(hwnd,&ps);
  break;

 case WM_DESTROY:
  DeleteObject(hF_black);//退出窗口时删除自定义字体
  DeleteObject(hF_big);

  PostQuitMessage(0);
  break;
 default:
  return DefWindowProc(hwnd,message,wParam,lParam);
 }
 return 0;
 }