WinMain中的Console与main中的Window
来源:互联网 发布:linux json 解析 编辑:程序博客网 时间:2024/05/11 18:37
1.如何在WinMain中创建一个Console。
调用AllocConsole分配一个Console资源;调用GetStdHandle获得OS的标准设备(输入,输出或错误),此函数返回一个句柄,若要使用标准C库函数,则需要根据获得的句柄转化为文件描述符;将此描述符与输出绑定就可以将它视为stdout/stdin/stderr了。
- #include <windows.h>
- #include <stdio.h>
- #include <io.h>
- #include <fcntl.h>
- int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- DWORD dwBytesWritten; char temp[1];
- char* msg1 = "第一条消息/n";
- char* msg2 = "第二条消息/n";
- char* msg3 = "第三条消息./n";
- char* msg4 = "第四条消息/n";
- char* msg5 = "第五条消息/n";
- //新建一个Console
- AllocConsole();
- //获得标准输出的Handle
- HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
- //向标准输出中写入数据
- WriteFile(handle, msg1, strlen(msg1), &dwBytesWritten, NULL);
- WriteFile(handle, msg2, strlen(msg2), &dwBytesWritten, NULL);
- //从文件Handle获得FD
- int hCrt = _open_osfhandle((long)handle,_O_TEXT);
- //标准C函数调用
- write(hCrt, msg3, strlen(msg3));
- FILE * hf = _fdopen( hCrt, "w" );
- char buf[2];
- setvbuf( hf, buf, _IONBF, 1 );
- //绑定hf至标准输出
- *stdout = *hf;
- fprintf(hf, msg4);
- printf(msg5);
- //获得标准输入
- HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); // return an OS file handle
- ReadFile(hIn, temp, 1, &dwBytesWritten, NULL);
- //释放Console
- FreeConsole();
- return (0);
- }
2.如何在main中创建一个窗口并应用消息
将控制台与创建的窗口分开,我创建一个线程,线程中调用CreateWindow,第一个参数设置为系统预定的”Edit”类。模块句柄由函数GetModuleHandle获得。
- #include <windows.h>
- #include <stdio.h>
- DWORD WINAPI mainGUI( LPVOID lp)
- {
- HMODULE hInstance= 0;
- hInstance = GetModuleHandle(NULL);
- HWND hWnd;
- MSG msg;
- //创建一个新的窗口
- hWnd = CreateWindow("EDIT",
- "由main创建的消息",
- WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- CW_USEDEFAULT,
- NULL,NULL,
- hInstance,
- NULL);
- if (!hWnd)
- return (1);
- //绑定hWnd与hWindow,向hWindow发送的消息由此线程处理
- *(HWND*)lp = hWnd;
- ShowWindow(hWnd, SW_SHOW);
- UpdateWindow(hWnd);
- while (GetMessage(&msg, NULL, NULL, NULL))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return (msg.wParam);
- }
- int main(int argc, char* argv[])
- {
- DWORD ID; HWND hWindow;
- char szOutput[64];
- CreateThread(NULL,0,mainGUI, &hWindow, NULL,&ID);
- printf("This console created the window above./n ");
- while (true) {
- scanf("%s", szOutput);
- if (!strcmp(szOutput, "quit"))
- break;
- //发送WM_SETTEXT消息
- SendMessage(hWindow,WM_SETTEXT, strlen(szOutput), (LPARAM)szOutput);
- }
- return 0;
- }
正如您所看到的,虽然VC在创建工程时要求我们指定是一个Console或GUI工程,此两个事例说明GUI与CUI基本上没有什么本质的区别。
原文:http://www.codeguru.com/cpp/w-d/console/article.php/c3957/
0 0
- WinMain中的Console与main中的Window
- WinMain中的Console与main中的Window
- WinMain中的Console与main中的Window
- WinMain与Main
- main与WinMain的区别
- _tmain与main,winMain,wmain
- MFC中的WinMain函数
- WinMain中的lpCmdLine参数
- WinMain中的音量控制
- WinMain 中的 lpCmdLine
- WinMain中的lpCmdLine参数
- MFC 中的Winmain
- WinMain中的lpCmdLine参数
- MFC中的winmain
- _tmain与main,winMain,wmain收藏
- main与WinMain命令行参数提取
- _tmain与main,winMain,wmain收藏
- MFC程序中的WinMain函数
- 一个低概率bug的定位过程---多线程操作文件时一定要注意
- 一步一步学JSP(一)
- 《UNIX环境高级编程》笔记:第1章 UNIX基础知识
- 移植linux3.7.4系统到itop4412开发板记录
- PHP 在用header或session时会遇到的 在调用之前有输出的问题。
- WinMain中的Console与main中的Window
- Win SDk是对VS开发环境的一种补充
- SVM算法介绍
- BZOJ1025 [SCOI2009]游戏(置换+数论+背包)
- linux进程切换
- WV.18-移动的最大距离
- EM算法介绍
- js判断浏览器版本
- dup chdir getcwd ls 管道