首页 > 其他 > 详细

使用AllocConsole()添加调试用控制台

时间:2014-03-23 10:29:52      阅读:570      评论:0      收藏:0      [点我收藏+]
AllocConsole 函数
为调用进程分配一个新的控制台。
  使用步骤:
  1.  AllocConsole();    //分配控制台
  2.  HANDLE  g_hOutput=GetStdHandle( STD_OUTPUT_HANDLE );    //获取标准输出设备句柄
  3.  WriteConsole(g_hOupput,lpBuffer,lpNumberofcharswritten,lpReserved);       //写入字符串到控制台缓冲区
 
代码演示:

OS:WIN32

  1. bubuko.com,布布扣
    #include "stdafx.h"
    #include "stdio.h"
    HINSTANCE g_hInstance = 0;
    HANDLE g_hOutput = 0;
    void OnKeyDown( HWND hWnd, WPARAM wParam )
    {
        CHAR szText[256] = { 0 };
        sprintf( szText, "WM_KEYDOWN:%08X\n", wParam );
        WriteConsole( g_hOutput, szText, strlen(szText),
                        NULL, NULL );
    }
    void OnKeyUp( HWND hWnd, WPARAM wParam )
    {
        CHAR szText[256] = { 0 };
        sprintf( szText, "WM_KEYUP:%08X\n", wParam );
        WriteConsole( g_hOutput, szText, strlen(szText),
                        NULL, NULL );
        sprintf( szText, "VirtualKey:%08X\n", VK_D);
        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_KEYUP:
            OnKeyUp( hWnd, wParam );
            break;
        case WM_DESTROY:
            PostQuitMessage( 0 );
            break;
        }
        return DefWindowProc( hWnd, nMsg, wParam, lParam );
    }
    //注册窗口类
    BOOL Register( LPSTR lpClassName, WNDPROC wndProc )
    {
        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 = lpClassName;
        wce.lpszMenuName = NULL;
        wce.style = CS_HREDRAW | CS_VREDRAW;
        ATOM nAtom = RegisterClassEx( &wce );
        if( nAtom == 0 )
            return FALSE;
        return TRUE;
    }
    //创建主窗口
    HWND CreateMain( LPSTR lpClassName, LPSTR lpWndName )
    {
        HWND hWnd = CreateWindowEx( 0, lpClassName, lpWndName,
                        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,
                        CW_USEDEFAULT, CW_USEDEFAULT, 
                        CW_USEDEFAULT, NULL, NULL, g_hInstance,
                        NULL );
        return hWnd;
    }
    //显示窗口
    void Display( HWND hWnd )
    {
        ShowWindow( hWnd, SW_SHOW );
        UpdateWindow( hWnd );
    }
    //消息循环
    void Message( )
    {
        MSG nMsg = { 0 };
        while( GetMessage( &nMsg, NULL, 0, 0 ) )
        {
            TranslateMessage( &nMsg );
            DispatchMessage( &nMsg );
        }
    }
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
        AllocConsole( );
        g_hOutput = GetStdHandle( STD_OUTPUT_HANDLE );
        g_hInstance = hInstance;
        if( !Register( "Main", WndProc ) )
        {
            MessageBox( NULL, "注册失败", "Infor", MB_OK );
            return 0;
        }
        HWND hWnd = CreateMain( "Main", "window" );
        Display( hWnd );
        Message( );
        return 0;
    }
    bubuko.com,布布扣

     

 附带控制台的一些函数:

HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); 
// 获取标准输出设备句柄
CONSOLE_SCREEN_BUFFER_INFO bInfo; // 窗口缓冲区信息
GetConsoleScreenBufferInfo(hOut, & bInfo );
// 获取窗口缓冲区信息
char strTitle[255];
GetConsoleTitle(strTitle, 255); // 获取窗口标题
//printf("当前窗口标题是:%s\n", strTitle);
//_getch();
SetConsoleTitle("变形实验"); // 获取窗口标题
//_getch();
COORD size = {1024, 1024};
SetConsoleScreenBufferSize(hOut,size); // 重新设置缓冲区大小
//_getch();
SMALL_RECT rc = {0,0, 1024-1, 1024-1}; // 重置窗口位置和大小
SetConsoleWindowInfo(hOut,true ,&rc);
COLORREF color = RGB(192,192,192);
SetConsoleTextAttribute(hOut,FOREGROUND_INTENSITY | FOREGROUND_BLUE);
  

 
 

使用AllocConsole()添加调试用控制台,布布扣,bubuko.com

使用AllocConsole()添加调试用控制台

原文:http://www.cnblogs.com/sixbeauty/p/3615591.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!