在控制台项目中实现窗体的程序
这样可能吗?不会吧?其实这个非常简单,简单地出乎你我的意料。以前我在CSDN看到过很多种解决控制台窗口和windows窗口共存的解决方案,但是没有记住,这回自己一实验就成功了,不用太多改动,真是太好了。其实我们不用创建多线程,只需将WinMain()函数替换成main()函数即可。详细情况请看我的文章《为自己创作一个好的DirectX程序风格》,这里我说明一下:
- /*---------------------------------------------------------------------------
- 蒋轶民制作 E-mail:jiangcaiyang123@163.com
- 文件名:MainFrame.cpp
- 作用:在控制台项目中实现窗体的程序
- ----------------------------------------------------------------------------*/
- #include<iostream>
- #include<windows.h>
- using namespace std;
- // 定义的宏
- #define JCLASSNAME "优化的程序"
- #define JCAPTION "程序演示"
- #define WINDOW_WIDTH 320
- #define WINDOW_HEIGHT 320
- HRESULT CALLBACK MyAppProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
- {
- switch ( msg )
- {
- case WM_DESTROY:
- PostQuitMessage( 0 );
- return 0;
- }
- return (HRESULT)DefWindowProc( hWnd, msg, wParam, lParam );
- };
- int main( int argc, char** argv )
- {
- cout<<"将要显示我的窗体程序喽!/n";
- system("pause");
- HINSTANCE hInst = NULL;
- // 设置Window Class结构并且注册它
- WNDCLASSEX jWndCls = { sizeof( jWndCls ), CS_CLASSDC, MyAppProc, 0, 0, hInst,
- NULL, NULL, 0, NULL, JCLASSNAME, NULL };
- RegisterClassEx( &jWndCls );
- // 设置窗口并且显示窗口
- HWND hWnd = CreateWindowEx( WS_EX_TOPMOST, JCLASSNAME, JCAPTION, WS_CAPTION | WS_SYSMENU, 20, 20,
- WINDOW_WIDTH, WINDOW_HEIGHT, NULL, NULL, hInst, NULL );
- if ( hWnd == NULL )
- return FALSE;
- ShowWindow( hWnd, SW_SHOWNORMAL );
- UpdateWindow( hWnd );
- // 进入消息循环
- MSG msg;
- 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 );
- return 0;
- }
除了将WinMain()函数替换成Main()函数之外,我在第38行处也进行了修改:为了使窗口能够在最顶端,我们必须将CreateWindow()函数替换成CreateWindowEx()函数。这个函数的第一个标识符就是设定Ex状态下的窗体风格选项的。通过使用WS_EX_TOPMOST这个标识符,我们可以将窗口显示在最顶端。
为自己的目标又迈进了一步!