CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

初学VC高分求教

楼主g20044111(虚心向学)2006-03-04 14:25:57 在 VC/MFC / 基础类 提问

/////////////////////////////////////////////  
      一个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

相关问题

  • 初学VC,拜师,1000分!
  • VC初学者
  • 初学vc...
  • 初学VC
  • 初学VC
  • VC初学者的问题:抢分啊!!
  • 一个初学VC者的高分求助!我就这些分了
  • 一个VC初学者的问题,(送给高手50分)一定要看
  • 在哪里有vc简单例程?初学者送分请高手指路!
  • 高分求一两台机器间消息传递的vc code,本人初学

关键词

  • program
  • wndclass
  • sztext
  • 字符串
  • szappname
  • usedefault
  • tcslen
  • dt
  • msg
  • vcenter

得分解答快速导航

  • 帖主:g20044111
  • vcmute
  • vcmute
  • vcmute
  • Mackz

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo