初学VC高分求教
/////////////////////////////////////////////
一个helloworld 的程序 问题在末尾
///////////////////////////////////////////
#include<windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int iCmdShow)
{
static TCHAR szAppName[]=TEXT ("HelloWorld");
static TCHAR lpszTitle[]=TEXT("My First Windows Program");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass.style=CS_HREDRAW|CS_VREDRAW;
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.lpszMenuName=NULL;
wndclass.lpszClassName=szAppName;
if(!RegisterClass(&wndclass))
{
MessageBox(NULL,TEXT("This program requires Windows NT!"),szAppName,MB_ICONERROR);
return 0;
}
hwnd=CreateWindow(szAppName,TEXT("The Hello Program"),WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL);
ShowWindow(hwnd,iCmdShow);
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;
PAINTSTRUCT ps;
RECT rect;
switch(message)
{
// case WM_CREATE:
// PlaySound(TEXT("helloworld.wav"),NULL,SND_FILENAME|SND_ASYNC);
// return 0;
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);
GetClientRect(hwnd,&rect);
DrawText(hdc,TEXT("Hello World!"),12,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
EndPaint(hwnd,&ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,message,wParam,lParam);
}
/*
问题1 :
case WM_CREATE:
PlaySound(TEXT("helloworld.wav"),NULL,SND_FILENAME|SND_ASYNC);
return 0;
上面这个声音程序错在哪了?
编译时错误提示如下:
HelloWorld_1.obj : error LNK2001: unresolved external symbol __imp__PlaySoundA@12
Debug/gsd1.exe : fatal error LNK1120: 1 unresolved externals
问题2: 对下面其中 的参数 12 是什么函义
DrawText(hdc,TEXT("Hello World!"),12,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
小弟理解是: 参数 12 是字符串"Hello World!"的长度,因为当设置成15时,输出Hello World!后有乱码
那么当字符串长度较长时,应该怎么设置这个参数呢??
问题 3: 写完代码后,在类视图ClassView 下编译后运行,CPU占用100% (机子卡住)! 这是为什么??
*/
问题点数:50、回复次数:6Top
1 楼vcmute(BCare4 H1Rest Good9!)回复于 2006-03-04 14:28:07 得分 10
project菜单settings中设置link中的lib添加 Winmm.libTop
2 楼vcmute(BCare4 H1Rest Good9!)回复于 2006-03-04 14:29:20 得分 10
问题2: 对下面其中 的参数 12 是什么函义
DrawText(hdc,TEXT("Hello World!"),12,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
小弟理解是: 参数 12 是字符串"Hello World!"的长度,因为当设置成15时,输出Hello World!后有乱码
那么当字符串长度较长时,应该怎么设置这个参数呢??
LPCTSTR szText = TEXT("Hello World!");
DrawText(hdc,szText,_tcslen(szText),&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
Top
3 楼vcmute(BCare4 H1Rest Good9!)回复于 2006-03-04 14:30:59 得分 10
while(GetMessage(&msg,NULL,0,0));
TranslateMessage(&msg);
DispatchMessage(&msg);
改为
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
但这个并不会卡住,因为GetMessage会堵塞住Top
4 楼g20044111(虚心向学)回复于 2006-03-04 22:50:33 得分 0
先感谢前辈对小弟的关心与垂爱! 还有不明白的地方
LPCTSTR szText = TEXT("Hello World!");
DrawText(hdc,szText,_tcslen(szText),&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
能解释下 上面两个句子吗??
while(GetMessage(&msg,NULL,0,0));//这为什么不会造成消息死循环,而只是堵塞??
TranslateMessage(&msg);
DispatchMessage(&msg);
Top
5 楼Mackz(在相互)回复于 2006-03-05 02:01:48 得分 20
szText定义一个字符串;_tcslen(szText)得到字符串长度。
GetMessage()没有取到消息不会返回,是为“堵塞”。Top
6 楼g20044111(虚心向学)回复于 2006-03-05 11:10:21 得分 0
大侠们,谢了!
现在明白了. 散分去````Top




