第一个问题:
console程序如果禁止用户点击右上角的X关闭?如何禁止用户使用Ctrl+C或者Ctrl+Break关闭?第二个问题:
使用printf显示到console上的字符,最多只能显示300行,如果可以增加这个数值或者是不限制?

解决方案 »

  1.   

    不好意思,打错字了.
    应该是"如何"不是"如果".PS:console程序如果禁止
    PS:如果可以增加这个数值
      

  2.   

    1.控制台需要注册窗口接收消息: 可以创建隐藏窗口
    2.msdn查"Console Functions"
      

  3.   

    第一个问题: 
    SetConsoleCtrlHandler来设置Ctrl+C的句柄.
    第二个问题: 
    用SetConsoleScreenBufferSize更改缓冲区大小.
      

  4.   

    to 4楼:
    第二个问题已经用GetConsoleScreenBufferInfo和SetConsoleScreenBufferSize解决了.现在是第一个问题没解决.我在main函数中另外启了两个工作线程.然后主线程等待工作线程.
    这两个工作线程中,有一个线程启动了一个线程池(目前设置为10个线程),另一个为一个死循环,等待一个event然后结束.我在主线程中调用了SetConsoleCtrlHandler,其Handler函数如下:
    BOOL HandlerRoutine(DWORD dwCtrlType)
    {
    switch (dwCtrlType)
    {
    case CTRL_C_EVENT:
    case CTRL_BREAK_EVENT:
    case CTRL_CLOSE_EVENT:
    return TRUE;
    case CTRL_LOGOFF_EVENT:
    case CTRL_SHUTDOWN_EVENT:
    return FALSE;
    default:
    return FALSE;
    }
    }
    但是按关闭按钮程序窗口还是会被关闭.
    然后我尝试在所有线程中调用SetConsoleCtrlHandler,包括两个工作线程和10个线程池中的线程,但是按关闭按钮还是会导致窗口被关闭.如何防止这种情况发生?
      

  5.   

    据我以前的经验,你无法阻止console窗口关闭(除非你拦截窗口的WM_CLOSE消息)。通常在收到CTRL-C/CTRL-BREAK指令的时候你应该执行你的清理代码,否则console程序会被强制关闭。
      

  6.   

    console所有的操作
    同时通过判断得到的消息来实现的,也就是你在捕获到消息CTRL-BREAK/CTRL-C后别让他做关闭操作就可以了至于要添加多于300行的问题,我不大知道