在控制台项目中实现窗体的程序
这样可能吗?不会吧?其实这个非常简单,简单地出乎你我的意料。以前我在优快云看到过很多种解决控制台窗口和windows窗口共存的解决方案,但是没有记住,这回自己一实验就成功了,不用太多改动,真是太好了。其实我们不用创建多线程,只需将WinMain()函数替换成main()函数即可。详细情况请看我的文章《为自己创作一个好的DirectX程序风格》,这里我说明一下:
- /*---------------------------------------------------------------------------
- 蒋轶民制作E-mail:jiangcaiyang123@163.com
- 文件名:MainFrame.cpp
- 作用:在控制台项目中实现窗体的程序
- ----------------------------------------------------------------------------*/
- #include<iostream>
- #include<windows.h>
- usingnamespacestd;
- //定义的宏
- #defineJCLASSNAME"优化的程序"
- #defineJCAPTION"程序演示"
- #defineWINDOW_WIDTH320
- #defineWINDOW_HEIGHT320
- HRESULTCALLBACKMyAppProc(HWNDhWnd,UINTmsg,WPARAMwParam,LPARAMlParam)
- {
- switch(msg)
- {
- caseWM_DESTROY:
- PostQuitMessage(0);
- return0;
- }
- return(HRESULT)DefWindowProc(hWnd,msg,wParam,lParam);
- };
- intmain(intargc,char**argv)
- {
- cout<<"将要显示我的窗体程序喽!/n";
- system("pause");
- HINSTANCEhInst=NULL;
- //设置WindowClass结构并且注册它
- WNDCLASSEXjWndCls={sizeof(jWndCls),CS_CLASSDC,MyAppProc,0,0,hInst,
- NULL,NULL,0,NULL,JCLASSNAME,NULL};
- RegisterClassEx(&jWndCls);
- //设置窗口并且显示窗口
- HWNDhWnd=CreateWindowEx(WS_EX_TOPMOST,JCLASSNAME,JCAPTION,WS_CAPTION|WS_SYSMENU,20,20,
- WINDOW_WIDTH,WINDOW_HEIGHT,NULL,NULL,hInst,NULL);
- if(hWnd==NULL)
- returnFALSE;
- ShowWindow(hWnd,SW_SHOWNORMAL);
- UpdateWindow(hWnd);
- //进入消息循环
- MSGmsg;
- ZeroMemory(&msg,sizeof(msg));
- while(msg.message!=WM_QUIT)
- {
- if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- else
- {
- //什么也不做
- }
- }
- //解除窗口注册
- UnregisterClass(JCLASSNAME,jWndCls.hInstance);
- return0;
- }
除了将WinMain()函数替换成Main()函数之外,我在第38行处也进行了修改:为了使窗口能够在最顶端,我们必须将CreateWindow()函数替换成CreateWindowEx()函数。这个函数的第一个标识符就是设定Ex状态下的窗体风格选项的。通过使用WS_EX_TOPMOST这个标识符,我们可以将窗口显示在最顶端。
为自己的目标又迈进了一步!