Win32程序(例如MFC、后台服务等)使用AllocConsole()添加调试用控制台
2016-02-21 23:44
573 查看
一、AllocConsole 函数
为调用进程分配一个新的控制台。使用步骤:
1. AllocConsole();//分配控制台
2. HANDLE g_hOutput=GetStdHandle(STD_OUTPUT_HANDLE );//获取标准输出设备句柄
3. WriteConsole(g_hOupput,lpBuffer,lpNumberofcharswritten,lpReserved);//写入字符串到控制台缓冲区
二、程序示例
#include <Windows.h> #include <stdio.h> HINSTANCE g_hInstance = 0; HANDLE g_hOutput = 0; void OnKeyDown( HWND hWnd, WPARAM wParam ) { //将日志信息输出到控制台窗口中 CHAR szText[256] = { 0 }; sprintf( szText, "You Push Down Key:%c\n", wParam ); WriteConsole( g_hOutput, szText, strlen(szText), NULL, NULL ); } LRESULT CALLBACK WndProc( HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam ) { switch( nMsg ) { case WM_KEYDOWN: OnKeyDown( hWnd, wParam ); break; case WM_DESTROY: PostQuitMessage( 0 ); break; } return DefWindowProc( hWnd, nMsg, wParam, lParam ); } int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { g_hInstance = hInstance; //创建一个控制台窗口 AllocConsole( ); g_hOutput = GetStdHandle( STD_OUTPUT_HANDLE ); //设置控制台窗口的属性 CHAR title[]="Output Debug Window"; SetConsoleTitle(title); SetConsoleTextAttribute((HANDLE)g_hOutput,FOREGROUND_RED| FOREGROUND_GREEN| FOREGROUND_INTENSITY);//| FOREGROUND_BLUE ); //获取控制台窗口的句柄 HWND hwnd=NULL; while(NULL==hwnd) hwnd=::FindWindow(NULL,(LPCTSTR)title); //屏蔽掉控制台窗口的关闭按钮,以防窗口被误删除 HMENU hmenu = ::GetSystemMenu ( hwnd, FALSE ); DeleteMenu ( hmenu, SC_CLOSE, MF_BYCOMMAND ); WNDCLASSEX wce = { 0 }; wce.cbSize = sizeof( wce ); wce.cbClsExtra = 0; wce.cbWndExtra = 0; wce.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wce.hCursor = NULL; wce.hIcon = NULL; wce.hIconSm = NULL; wce.hInstance = g_hInstance; wce.lpfnWndProc = WndProc; wce.lpszClassName = "Main"; wce.lpszMenuName = NULL; wce.style = CS_HREDRAW | CS_VREDRAW; ATOM nAtom = RegisterClassEx( &wce ); if( nAtom == 0 ) { MessageBox( NULL, "Failed to RegisterClass()", "Info", MB_OK ); return 0; } HWND hWnd = CreateWindowEx( 0, "Main", "window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, g_hInstance, NULL ); ShowWindow( hWnd, SW_SHOW ); UpdateWindow( hWnd ); MSG nMsg = { 0 }; while( GetMessage( &nMsg, NULL, 0, 0 ) ) { TranslateMessage( &nMsg ); DispatchMessage( &nMsg ); } return 0; } |
三、附带控制台的一些函数
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//获取标准输出设备句柄
CONSOLE_SCREEN_BUFFER_INFObInfo; // 窗口缓冲区信息
GetConsoleScreenBufferInfo(hOut,& bInfo );
//获取窗口缓冲区信息
charstrTitle[255];
GetConsoleTitle(strTitle,255); // 获取窗口标题
//printf("当前窗口标题是:%s\n",strTitle);
//_getch();
SetConsoleTitle("变形实验");// 获取窗口标题
//_getch();
COORDsize = {1024, 1024};
SetConsoleScreenBufferSize(hOut,size);// 重新设置缓冲区大小
//_getch();
SMALL_RECTrc = {0,0, 1024-1, 1024-1}; // 重置窗口位置和大小
SetConsoleWindowInfo(hOut,true,&rc);
COLORREFcolor = RGB(192,192,192);
SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY| FOREGROUND_BLUE);
相关文章推荐
- Visual C++中MFC消息的分类
- MFC中Radio Button的用法详解
- MFC对话框中添加状态栏的方法
- MFC创建右键弹出菜单的方法
- MFC中动态创建控件以及事件响应实现方法
- C++ 关于MFC多线程编程的注意事项
- MFC程序对文件的处理方法
- MFC自定义消息的实现方法
- MFC实现在文件尾追加数据的方法
- win32下进程间通信(共享内存)实例分析
- MFC之ComboBox控件用法实例教程
- MFC绘制不规则窗体的方法
- WMI中的Win32_PingStatus类(ping命令实现)
- win32安装配置非安装版的MySQL
- 一个win32窗口创建示例
- IE8引发 VS2005/2008 MFC向导出错的解决方案
- iis Win32状态数值(sc-win32-status)说明
- nginx win32 版本静态文件测试 (Windows环境)
- C#利用win32 Api 修改本地系统时间、获取硬盘序列号
- MFC实现全屏功能代码实例