#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在运行。谢谢大家帮助!!

解决方案 »

  1.   

    有这样不负责任的例子?这两个字体在WM_PAINT中创建,在WM_DESTROY消息中销毁?
    局部变量在每次进入函数时都要初始化的,也就是说WM_PAINT里的hf_big和WM_DESTROY里的hf_big不是同一个东西。
    如果执意用局部变量,应该把创建字体和销毁字体都放到WM_PAINT消息中去,否则hf_black和hf_big要放到外面作为全局变量,在WM_CREATE中创建字体。
      

  2.   

    也可以把hf_big和hf_black作为静态的局部变量,和全局变量一样。
      

  3.   

    非常感谢Mackz(在相互),目前告警的问题已经没有了。但是窗口不能正常显示,但在后台运行!小弟不解。不好意思,烦劳各位了。
      

  4.   

    default: 
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
      

  5.   

    在消息处理的
    default:
    return   DefWindowProc(hwnd,uMsg,wParam,lParam);

      

  6.   

    所有的问题已解决,这么弱智的问题能得到大家这么热心的帮助,使小弟我更加坚定了学习的信心。
    非常感谢:Mackz(在相互), hmzgz81(哩翱)。