⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_49302.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:49302 发表者:鹏程 发表日期:2003-08-08 20:39:02
<br>主题:请教朋友几个问题,谢谢
<br>内容:在下述程序中,有几点不明白,请朋友们帮忙,谢谢了:<BR>(1)在语句LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM)中,对“CALLBACK”和“LRESULT”的具体含义不明白。<BR><BR>(2)函数int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int iCmdShow)和函数LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)的参数是不是由系统自动传入的?<BR><BR>(3)书上讲窗口类“WNDCLASS”是一个结构,定义如下:<BR>typedef def tagWNDCLASSW&nbsp;&nbsp;//其中,“typedef”,“def”,“tag”不明白,这不象类定义的形式呀?类怎能和结构混为一谈呢?<BR>{<BR>&nbsp;&nbsp;UNIT&nbsp;&nbsp;&nbsp;&nbsp; style;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //“UNIT”是不是印错了?是不是应该为“UINT”呀?<BR>&nbsp;&nbsp;WINPROC&nbsp;&nbsp;lpfnWndProc;<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;...<BR>&nbsp;&nbsp;LPCWSTR&nbsp;&nbsp;lpszClassName;<BR>}WNDCLASS;<BR><BR>(4)在 ShowWindow(hwnd,iCmdShow)语句中,当我把参数“iCmdShow”换成“SW_SHOWMAXIMIZE”后,程序并不能最大化显示窗口,反而出错了,不知为什么?<BR><BR><BR><BR><BR>源程序如下:<BR>#include &lt;windows.h&gt;<BR>//窗口函数声明<BR>LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);<BR><BR>//以下代码初始化窗口类<BR>int WINAPI WinMain(HINSTANCE hInstance,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HINSTANCE hPrevInstance,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPSTR&nbsp;&nbsp;&nbsp;&nbsp; szCmdLine,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iCmdShow)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口类名<BR>&nbsp;&nbsp;&nbsp;&nbsp;static TCHAR szAppName[] = TEXT("HelloWorld");<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口标题名<BR>&nbsp;&nbsp;&nbsp;&nbsp;static TCHAR lpszTitle[] = TEXT("MY First Windows Program");<BR>&nbsp;&nbsp;&nbsp;&nbsp;HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hwnd;<BR>&nbsp;&nbsp;&nbsp;&nbsp;MSG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msg;<BR>&nbsp;&nbsp;&nbsp;&nbsp;WNDCLASS&nbsp;&nbsp;wndclass;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口类风格<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.style = CS_HREDRAW|CS_VREDRAW;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口处理函数为WndProc<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.lpfnWndProc = WndProc;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口类没有扩展<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.cbClsExtra = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口类实例没有扩展<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.cbWndExtra = 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//当前实例句柄<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.hInstance = hInstance;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口的最小化图标为默认图标<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口采用箭头光标<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口背景为白色<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口没有菜单<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.lpszMenuName = NULL;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//窗口类名<BR>&nbsp;&nbsp;&nbsp;&nbsp;wndclass.lpszClassName = szAppName;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//如果注册失败则发出警告声<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!RegisterClass(&amp;wndclass))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEXT("This Program requires Windows NT!"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; szAppName,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MB_ICONERROR);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;hwnd = CreateWindow(szAppName,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEXT("The Hello Program"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WS_OVERLAPPEDWINDOW,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CW_USEDEFAULT,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CW_USEDEFAULT,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CW_USEDEFAULT,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CW_USEDEFAULT,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hInstance,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//显示窗口<BR>&nbsp;&nbsp;&nbsp;&nbsp;ShowWindow(hwnd,iCmdShow);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//绘制用户区<BR>&nbsp;&nbsp;&nbsp;&nbsp;UpdateWindow(hwnd);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//消息循环<BR>&nbsp;&nbsp;&nbsp;&nbsp;while(GetMessage(&amp;msg,NULL,0,0))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage(&amp;msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage(&amp;msg);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;//消息循环结束(即程序终止)时将信息返回系统<BR>&nbsp;&nbsp;&nbsp;&nbsp;return msg.wParam;<BR>}<BR><BR>//窗口函数定义<BR>LRESULT CALLBACK WndProc(HWND hwnd,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UINT message,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WPARAM wParam,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPARAM lParam)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdc;<BR>&nbsp;&nbsp;&nbsp;&nbsp;PAINTSTRUCT ps;<BR>&nbsp;&nbsp;&nbsp;&nbsp;RECT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//消息处理语句<BR>&nbsp;&nbsp;&nbsp;&nbsp;switch (message)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_CREATE:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlaySound(TEXT("helloworld.wav"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;NULL,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SND_FILENAME|SND_ASYNC);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0 ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//当客户区的一部分或全部变为无效以致必须刷新时,将由这个消息通知程序<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_PAINT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hdc = BeginPaint(hwnd,&amp;ps);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(hwnd,&amp;rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DrawText(hdc,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TEXT("Hello World!"),<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;rect,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DT_SINGLELINE|DT_CENTER|DT_VCENTER);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EndPaint(hwnd,&amp;ps);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//退出窗口<BR>&nbsp;&nbsp;&nbsp;&nbsp;case WM_DESTROY:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//调用PostQuitMessage函数发出WM_QUIT消息<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(0); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;return DefWindowProc(hwnd,message,wParam,lParam);<BR>}<BR><BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:佳明 回复日期:2003-08-09 10:53:12
<br>内容:(1)&nbsp;&nbsp;#define CALLBACK __stdcall<BR>&nbsp;&nbsp;&nbsp;&nbsp; LRESULT&nbsp;&nbsp; Signed result of message processing.(消息函数的返回值)<BR>(2)&nbsp;&nbsp;那两个函数的参数是系统传给的<BR>(3)&nbsp;&nbsp;UINT style ,WNDCLASS是结构,不是类,它是向Windows注册窗口类用的<BR>(4)&nbsp;&nbsp;不是SW_SHOWMAXIMIZE,是SW_SHOWMAXIMIZED,用SW_MAXIMIZE也行<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鹏程 回复日期:2003-08-09 12:01:05
<br>内容:谢谢,您再通俗解释一下“(1)&nbsp;&nbsp;#define CALLBACK __stdcall<BR>&nbsp;&nbsp;&nbsp;&nbsp; LRESULT&nbsp;&nbsp; Signed result of message processing.(消息函数的返回值)”好吗?<BR><BR>既然“WNDCLASS是结构,不是类”,那为什么书上说“WNDCLASS&nbsp;&nbsp;wndclass”声明了一个“窗口类”呢?<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:佳明 回复日期:2003-08-09 17:13:20
<br>内容:The __stdcall calling convention is used to call Win32 API functions. The callee cleans the stack, so the compiler makes vararg functions __cdecl. Functions that use this calling convention require a function prototype.<BR><BR>return-type __stdcall function-name[(argument-list)]<BR>这段是MSDN上的解释,大概是说__stdcall这个调用约定是用来调用Win32 API函数的<BR>LRESULT 和BOOL,UINT等一样,是函数的返回值类型,它是消息处理函数的返回值<BR>类型。我觉得像 CALLBACK,LRESULT ,HANDLE这些东西,只要知道它们是用在什么<BR>地方的,怎么用就行了,不用管它们究竟是什么。比如HANDLE实际上是void*,<BR>HWND 是HWND__*,但我们用的时候不用管这些<BR><BR>RegisterClass用来注册一个窗口类,在屏幕上显示的窗口(包括普通窗口,各种控件)<BR>都有它们所属的窗口类,这个类的概念我觉得(我不知道对不对)和C++里的类不是<BR>一回事,只是同名,我觉得这个类就是“同类”的类
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鹏程 回复日期:2003-08-09 18:43:36
<br>内容:朋友说的是。<BR>顺便问一下:在VC++6中,为什么输入代码时字符的大小写不能自动转换呀?很容易出错的。是不是我的编译器设置的有问题?并且代码的左边也设置不出来行号,要怎样设置才行呢?<BR><BR>如果在VB6中,输入代码时字符的大小写是能够自动转换的,非常方便的,而且也不容易出错,非常好的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:佳明 回复日期:2003-08-09 18:56:37
<br>内容:因为Basic不区分大小写,C语言是区分大小写的,也就是说,在Basic语言里,<BR>大写和小写的意义是一样的,所以可以转换.C语言里不行<BR><BR>VC6里怎么显示行号我不知道,不过VC7里很容易。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:鹏程 回复日期:2003-08-09 19:14:01
<br>内容:哦,谢谢朋友的指导!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -