#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
){
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName="wen";
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW | CS_VREDRAW; if(!RegisterClass(&wc))
{
MessageBeep(0);
return FALSE;
} HWND hwnd;
hwnd=CreateWindow("wen","FOR EXAMPLE THE TEXT OUT",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd); MSG msg;
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;}LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
){
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; switch(uMsg)
{
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,//字体的粗度,此处设置为最粗
0,//非斜体字
0,//无下划线
0,//无中划线,即删除线
ANSI_CHARSET,//表示所用的字符集为ANSI_CHARSET
OUT_DEFAULT_PRECIS,//字体为系统默认的输出精度
CLIP_DEFAULT_PRECIS,//为系统默认的裁剪精度
DEFAULT_QUALITY,// 字体的输出质量为系统默认
DEFAULT_PITCH | FF_DONTCARE,//字体的间距和字体系列均为默认
"粗体字"
);
SelectObject(hdc,hf_black);
SetTextColor(hdc,RGB(0,255,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,X,Y,lpsz_2,strlen(lpsz_2));
//开始输出第三行的准备
Y=Y+tm.tmHeight+10*tm.tmExternalLeading;//计算下一行文本的Y坐标
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,与页底平行
0,//字体的倾斜度为0
FW_NORMAL,//字体的粗度,此处设置为一般租
1,//斜体字
1,//有下划线
0,//无中划线,即删除线
ANSI_CHARSET,//表示所用的字符集为ANSI_CHARSET
OUT_DEFAULT_PRECIS,//字体为系统默认的输出精度
CLIP_DEFAULT_PRECIS,//为系统默认的裁剪精度
DEFAULT_QUALITY,// 字体的输出质量为系统默认
DEFAULT_PITCH | FF_DONTCARE,//字体的间距和字体系列均为默认
"大号字"
);
SelectObject(hdc,hf_big);
SetTextColor(hdc,RGB(155,155,155));
//GetTextMetrics(hdc,&tm);
TextOut(hdc,X,Y,lpsz_4,strlen(lpsz_4));
//准备输出第五行
SetTextColor(hdc,RGB(255,0,0));
X=0;
Y=Y+tm.tmHeight+30*tm.tmExternalLeading;
TextOut(hdc,X,Y,lpsz_5,strlen(lpsz_5));
//准备输出第五行的后半段
GetTextExtentPoint(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:
DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;}
出现如下告警信息:Compiling...
fivetext.cpp
e:\vc++6\msdev98\myprojects\fivetext\fivetext.cpp(154) : warning C4700: local variable 'hf_black' used without having been initialized
e:\vc++6\msdev98\myprojects\fivetext\fivetext.cpp(155) : warning C4700: local variable 'hf_big' used without having been initialized
Linking...fivetext.exe - 0 error(s), 0 warning(s)但是窗口无法正常显示,在资源管理器中可以看到这个程序的.exe在运行。谢谢大家帮助!!
#include <stdlib.h>
#include <string.h>
#include <stdio.h>LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);int WINAPI WinMain(
HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine, // pointer to command line
int nCmdShow // show state of window
){
WNDCLASS wc;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
wc.hInstance=hInstance;
wc.lpfnWndProc=WndProc;
wc.lpszClassName="wen";
wc.lpszMenuName=NULL;
wc.style=CS_HREDRAW | CS_VREDRAW; if(!RegisterClass(&wc))
{
MessageBeep(0);
return FALSE;
} HWND hwnd;
hwnd=CreateWindow("wen","FOR EXAMPLE THE TEXT OUT",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);
ShowWindow(hwnd,SW_SHOWNORMAL);
UpdateWindow(hwnd); MSG msg;
while(GetMessage(&msg,0,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;}LRESULT CALLBACK WndProc(
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
){
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; switch(uMsg)
{
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,//字体的粗度,此处设置为最粗
0,//非斜体字
0,//无下划线
0,//无中划线,即删除线
ANSI_CHARSET,//表示所用的字符集为ANSI_CHARSET
OUT_DEFAULT_PRECIS,//字体为系统默认的输出精度
CLIP_DEFAULT_PRECIS,//为系统默认的裁剪精度
DEFAULT_QUALITY,// 字体的输出质量为系统默认
DEFAULT_PITCH | FF_DONTCARE,//字体的间距和字体系列均为默认
"粗体字"
);
SelectObject(hdc,hf_black);
SetTextColor(hdc,RGB(0,255,0));
GetTextMetrics(hdc,&tm);
TextOut(hdc,X,Y,lpsz_2,strlen(lpsz_2));
//开始输出第三行的准备
Y=Y+tm.tmHeight+10*tm.tmExternalLeading;//计算下一行文本的Y坐标
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,与页底平行
0,//字体的倾斜度为0
FW_NORMAL,//字体的粗度,此处设置为一般租
1,//斜体字
1,//有下划线
0,//无中划线,即删除线
ANSI_CHARSET,//表示所用的字符集为ANSI_CHARSET
OUT_DEFAULT_PRECIS,//字体为系统默认的输出精度
CLIP_DEFAULT_PRECIS,//为系统默认的裁剪精度
DEFAULT_QUALITY,// 字体的输出质量为系统默认
DEFAULT_PITCH | FF_DONTCARE,//字体的间距和字体系列均为默认
"大号字"
);
SelectObject(hdc,hf_big);
SetTextColor(hdc,RGB(155,155,155));
//GetTextMetrics(hdc,&tm);
TextOut(hdc,X,Y,lpsz_4,strlen(lpsz_4));
//准备输出第五行
SetTextColor(hdc,RGB(255,0,0));
X=0;
Y=Y+tm.tmHeight+30*tm.tmExternalLeading;
TextOut(hdc,X,Y,lpsz_5,strlen(lpsz_5));
//准备输出第五行的后半段
GetTextExtentPoint(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:
DefWindowProc(hwnd,uMsg,wParam,lParam);
}
return 0;}
出现如下告警信息:Compiling...
fivetext.cpp
e:\vc++6\msdev98\myprojects\fivetext\fivetext.cpp(154) : warning C4700: local variable 'hf_black' used without having been initialized
e:\vc++6\msdev98\myprojects\fivetext\fivetext.cpp(155) : warning C4700: local variable 'hf_big' used without having been initialized
Linking...fivetext.exe - 0 error(s), 0 warning(s)但是窗口无法正常显示,在资源管理器中可以看到这个程序的.exe在运行。谢谢大家帮助!!
局部变量在每次进入函数时都要初始化的,也就是说WM_PAINT里的hf_big和WM_DESTROY里的hf_big不是同一个东西。
如果执意用局部变量,应该把创建字体和销毁字体都放到WM_PAINT消息中去,否则hf_black和hf_big要放到外面作为全局变量,在WM_CREATE中创建字体。
return DefWindowProc(hwnd, uMsg, wParam, lParam);
default:
return DefWindowProc(hwnd,uMsg,wParam,lParam);
非常感谢:Mackz(在相互), hmzgz81(哩翱)。