- 博客(0)
- 资源 (9)
空空如也
改变MFC对话框背景色、控件内的字体
改变MFC对话框背景色、控件内的字体颜色和背景色
设置 Dialog, Group Box, Static Text, Check Box, Edit Ctrl(disabled), Combo Box(disabled), Radio Button等背景色
编写WM_CTLCOLOR消息的映射函数OnCtlColor(CDC *pDC, CWnd pWnd, UINT nCtlColor)
2012-05-31
MFC调用win32窗口显示调试信息
MFC调用win32窗口显示调试信息,使用AllocConsole 函数(2010-11-16 15:33:25)转载标签: 调试win32mfc杂谈 分类: 编译器
AllocConsole Function 为主调进程分配一个新的控制台。
语法 C++ :
BOOL WINAPI AllocConsole(void);
参数: 无
返回值:如果函数成功,返回值是非零值;如果函数失败,返回值是零值。
备注: 一个进程仅能关联一个控制台,所以该函数在主调进程已经具有控制台时将会失败。
一个进程可以使用 FreeConsole 函数来释放与之关联的控制台,之后它就可以调用该函数来创建一个新的控制台或使用 AttachConsole 函数来关联另一个控制台。
如果主调进程创建了一个子进程,则子进程也将继承这个新创建的控制台。
该函数为新的控制台初始化标准输入、输出、错误句柄等。
标准输入句柄是一个控制台输入缓冲的句柄,标准输出和标准错误句柄则是控制台屏幕缓冲的句柄。为了获得这些句柄,可以使用 GetStdHandle 函数。 该函数主要用于GUI应用程序来创建一个控制台窗口。
GUI应用程序初始化时时没有控制台的,而控制台应用程序则以控制台来初始化的。
要求 : Minimum supported client Windows 2000 Professional
Minimum supported server Windows 2000 Server
Header: Wincon.h (include Windows.h)
Library: Kernel32.lib DLL Kernel32.dll
----------------------------------------------------------------------------------------
虽然WIN32时代是图形界面时代,但偶尔程序中还需要用到命令行模式,比如批处理,这时再搞个图形界面出来显得似乎就不那么专业了。但客户还需要在正常状态下(对于命令行模式,我认为用户是非正常状态,比如脑子进水。)使用图形界面,这决定我们不能开一个控制台工程,而需要使用MFC exe程序。
OK,理所当然的,通过条件控制,命令行下我关掉对话框界面的调用代码,再使用
cout << "Hello world!" << endl; 来向这个友好的世界打个招呼,并坚持认为这句问候应该显示在CMD那个漆黑的窗口里。
很沮丧地说,事实给我与痛击。cmd窗口里仍然漆黑一片,系统完全不理会我的友好。
邓爷爷说,改革开放好!也许,我也需要个改革。
在同事mr. zhang的指导下,我找到一组API:Console Functions!正是这组API,最终让我的友好得以正当地表达。
一。创建一个Console,AllocConsole
直接使用 AllocConsole(); 马上,若是进程内第一次调用这个函数,一个空的cmd窗口会蹦出来。需要注意,一个进程只能创建一个console,多次调用会返回FALSE;而且,这个窗口是个独立的控制台窗口。
MSDN的解释:A process can be associated with only one console, so the AllocConsole function fails if the calling process already has a console. 还有段:If the calling process creates a child process, the child inherits the new console.
二。显示Hello World,WriteConsole
有了console,我们还需要获取它的句柄HANDLE,然后才能在上面显示。方法是 GetStdHandle,它会获取前面我们AllocConsole得到的cmd窗口的句柄;若未调用AllocConsole,将获取标准的输入输出窗口句柄。
MSDN的解释:The GetStdHandle function returns a handle for the standard input, standard output, or standard error device.
HANDLE hdlWrite = GetStd
2012-05-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人