1.在用VC 6.0创建窗口时,我的步骤是这样的(跟着孙鑫教程里学的)。1,新建一个工程win32 application

[复制链接]
查看11 | 回复4 | 2011-8-24 09:02:49 | 显示全部楼层 |阅读模式
确定,建一个空工程,确定。2,新建一个c源文件,然后打代码。3,编译没问题,组建没问题,执行文件。达到效果后就退出(销毁)窗口,然后我改变代码中光标的value,换了另一种光标。接着编译没问题,组建出错了:LINK:fatalerrorLNK1168:cannotopenDebug/wenti.exeforwriting百度一下这个问题是因为wenti.exe这个可执行文件没有关闭。打开进程的确是这个文件在运行,把这个文件关闭继续组建成功,执行顺利。问题1:为什么我销毁了窗口(return0,关闭了函数?)那个可执行文件还在运行?运行几次就会在管理器里看到几个相同的可执行文件运行?看孙鑫教程时管理器里运行的都是WinMain函数,我的程序运行时为什么任务管理器里没有这个函数?2.关闭VC,从文件夹里打开C源文件(用VC打开)编译成功,组建时出现问题:LIBCD.lib(crt0.obj):errorLNK2001:unresolvedexternalsymbol_main百度了这个问题是因为没有建立win32Application工程,想想也是。打开的只是代码,通过工程-设置-连接,改变工程选项成功组建,执行。问题2:win32Application(32位操作系统应用程序)这个东西到底是什么,其实我在创建这个窗口的时候只是照着视频做,其中过程是再干什么根本不知道。我理解的是组建的过程是将cpp源程序与win32Application这个工程连接起来,这个工程到底是什么东西?MFC,DLL这些是函数库?问题3:程序文件夹里生成的那些后缀不同文件都是什么东西?Debug(组建)文件夹里的文件是组建生成的文件吧?那个*.exe文件是执行生成的吗,都是些什么东西?问体很长,先感谢回答我问题的大虾嘞。。
回复

使用道具 举报

千问 | 2011-8-24 09:02:49 | 显示全部楼层
问题2,源代码是需要工作空间支持的。Win32Application即(Win32API)。所谓的这个工程,是把许多源代码组合在一起而已。编译时,将所有文件编译成相对应的*.o,组建的时候,将它们连接起来,再与系统库(如MFC)连接,组合成可执行文件问题三*.opt应该说是临时控件,对工程的修改都保存在这里,除非你保存文件。plg是编译连接时产生的“日志”obj就是编译成的目标文件pdb、pch是编译时需要的文件
回复

使用道具 举报

千问 | 2011-8-24 09:02:49 | 显示全部楼层
第一个问题主要是:关闭窗口跟结束应用程序是有区别的建议在看孙鑫的视频的时候结合一些书来看看,以前也是这样过来的。坚持,慢慢就会好地。
回复

使用道具 举报

千问 | 2011-8-24 09:02:49 | 显示全部楼层
#includewindows.h#pragmacomment(lib,\"user32.lib\")#pragmacomment(lib,\"Gdi32.lib\")LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam);HWNDhWnd;//窗口句柄,定义为全局intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){MSGmsg;WNDCLASSwnd;wnd.style=0;wnd.cbClsExtra=0;//应该0wnd.cbWndExtra=0;//均为0wnd.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//背景填充颜色wnd.hCursor=LoadCursor(NULL,IDC_ARROW);//光标,使用默认光标参数一为NULLwnd.hIcon=LoadIcon(NULL,IDI_EXCLAMATION);//图标wnd.hInstance=hInstance;//句柄wnd.lpfnWndProc=WndProc;//消息处理wnd.lpszClassName=\"XP\";//类名wnd.lpszMenuName=NULL;//菜单名RegisterClass(//注册hWnd=CreateWindow(\"XP\",\"窗口\",WS_OVERLAPPEDWINDOW,100,100,500,500,NULL,NULL,hInstance,NULL);//创建窗口,参考MSDNShowWindow(hWnd,SW_SHOWNORMAL);//显示UpdateWindow(hWnd);//更新窗口while(GetMessage(DispatchMessage(}return0;}/*LRESULTCALLBACKWindowProc(HWNDhwhd,uMsg,WPARAMwParam,LPARAMIParam)消息响应函数定义hwnd:指向窗口的句柄。uMsg:指定消息类型。wParam:消息IParam:消息*/LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){switch(message){caseWM_CLOSE://关闭if(MessageBox(hWnd,\"是否退出\",\"询问\",MB_YESNO)==IDYES)//使用全局消息框PostQuitMessage(0);//将WM_QUIT加入消息队列中break;caseWM_KEYDOWN://键盘按下,一种消息类型,MFC会更全switch(wParam){caseVK_UP:MessageBox(hWnd,\"上\",\"按下\",MB_OK);caseVK_RBUTTON:MessageBox(hWnd,\"鼠标右键\",\"按下\",MB_OK);break;caseVK_MENU:MessageBox(hWnd,\"Alt\",\"按下\",MB_OK);break;caseVK_END:MessageBox(hWnd,\"END\",\"按下\",MB_OK);break;caseVK_LEFT:MessageBox(hWnd,\"左\",\"按下\",MB_OK);break;caseVK_RIGHT:MessageBox(hWnd,\"右\",\"按下\",MB_OK);break;caseVK_DOWN:MessageBox(hWnd,\"下\",\"按下\",MB_OK);break;caseVK_CONTROL:MessageBox(hWnd,\"Ctrl\",\"按下\",MB_OK);break;caseVK_ESCAPE:MessageBox(hWnd,\"Esc\",\"按下\",MB_OK);//PostQuitMessage(0);break;caseVK_SHIFT:MessageBox(hWnd,\"SHIFT\",\"按下\",MB_OK);break;default:break;}default:returnDefWindowProc(hwnd,message,wParam,lParam);//缺省处理}return(0);}没有外部定义.......MFC是标准的win32Application文件DLL为动态链接库Library,连接文件可以使用类进行封装窗口创建MFC也是如此可以加入afxwin.h头文件对mfc库的调用C的半面向对象的思想mfc对基本数据也有所封装,若果没有C基础,对其不熟悉,可能会进展不顺对于一些函数传参不了,可以参考MSDN追问我的GetMessage()参数写错了。错误的代码GetMessage(DispatchMessage(}return0;//退出WainMain()函数,就是推出.exe执行进程?是因为GetMessage(defds123msg,hwnd,0,0)错误的参数导致循环成死循环,return0;不能执行?关闭之后没关闭的进程占CPU近50%
回复

使用道具 举报

千问 | 2011-8-24 09:02:49 | 显示全部楼层
一起来学习。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行