VS2015 、VS2017 MFC输出日志到控制台窗口

VS2015 、VS2017 MFC输出日志到控制台窗口,第1张

在做DLL库的时候经常会通过printf打印一些调试信息,但是MFC项目引用后printf信息是无法输出到调试窗口的,网上一些说通过AllocConsole()打开命令窗口在VS2017中竟然不好用,最终经过网络寻找到可用方法:

在vs中打开你的解决方案。

鼠标移动到你的项目名称上,点击鼠标右键,再点击属性,此刻会此项目的属性页。

在配置属性中,找到生成事件,在找到后期生成事件。

在命令行的右边空白处添加“editbin /SUBSYSTEM:CONSOLE $(OUTDIR)$(ProjectName).exe”,点击确定。

以上4步就已经ok了,此时运行你的程序,会多d出一个黑色命令行的提示框,用来输出你的打印信息。

VS2017 显示控制台窗口

1. 在vs中打开你的解决方案。

2. 鼠标移动到你的项目名称上,点击鼠标右键,再点击属性,此刻会此项目的属性页。

3. 在配置属性中,找到生成事件,在找到后期生成事件。

4. 在命令行的右边空白处添加:editbin /SUBSYSTEM:CONSOLE $(OUTDIR)\$(ProjectName).exe,点击确定。

5. 以上4步就已经ok了,此时运行你的程序,会多d出一个黑色命令行的提示框,用来输出你的打印信息

创建一个完整窗口要经历的步骤:

1)设计一个窗口类;

2)注册窗口类;

3)创建窗口;

4)显示及更新窗口。

第一步:

windows 已经为用户定义了一个完整的窗口类,用户只需要将各个属性填满既可以。窗口类是一个 结构体,其定义如下:

typedef struct _WNDCLASS{

UINT style//class style

WNDPROC lpfnWndProc

int cbClsExtra

int cbWndExtra

HANDLE hInstance

HICONhIcon

HCURSOR hCursor

HBRUSH hbrBackground

LPCTSTR lpszMenuName

LPCTSTR lpszClassName

}WNDCLASS

第二步:

用RegisterClass(&wndclass)来定义的窗口注册。

第三步:创建窗口

1)定义一个句柄,然后用CreateWindow()来为句柄赋值。函数用法参看MSDN。创建窗口必须依据已经声明并且已经注册的窗口类型来创建。

HWND CreateWindow(

LPCTSTRlpClassName,//定义的窗口类名

LPCTSTRlpWindowName,//窗口的名字,将会在标题栏上显示出来的

DWORD dwStyle,//窗口的风格(窗口的外观模式和功能按钮等等)

intx,//窗口初始位置ws_usedefault

inty,//同上

intnWidth,//窗口的宽度,可以用ws_usedefault

intnHeight,//窗口高度,可以用ws_usedefault

HWND hWndParent,//父窗口的句柄,单一窗口则设置为空

HMENU hMenu,//菜单的句柄,如果没有菜单则将这个句柄设置为空

HINSTANCE hInstance,//由系统进行分配标识

LPVOID lpParam//一般设置为空

)

第四步:显示窗口

调用ShowWindow()函数来显示窗口。

ShowWindow(

HWND hWnd,//要显示的窗口的句柄

intnCmdShow//显示窗口的模式,如:最大化最小花显示

)

第五步:更新窗口

在显示窗口的函数调用完毕以后调用UpdateWindow()来对窗体进行更新

UpdateWindow(hwnd)//这个函数没有并不影响消息产生。

//消息循环

MSG msg//定义了一个消息结构体变量

while(GetMessage(&msg,NULL,0,0))

{

TranslateMessage(&msg)

DispatchMessage(&msg)

}

/*

GetMessage(

LPMSG lpMsg,

//消息结构提的指针,无需对这个消息结构提的内部成员初始化,

//这个只需将定义的结构体的地址传到这里

HWND hWnd,

//窗口句柄,指明要获得的是那个窗口的消息,如果要获取所有窗口的消息则

//定义为NULL

UINT wMsgFilterMin,

//用来指定要从消息队列里边取得的最小值,

UINT wMsgFilterMax

//用来指定要从消息队列里边取得的最大值,

///////////////////////////////////////////////////////////////////////

//这两个参数用来限制GETMESSAGE 在消息队列里边的取值范围,//

//以去处调一些确定不感兴趣的消息 //

//if要从消息队列中所有的消息中提取的话则两个参数均设定为 //

//零 //

///////////////////////////////////////////////////////////////////////

)//从调用程序线程消息队列中取消息

*/

有了创建窗口的整个流程以后,现在就开始定义窗口过程,用WindowProc()

LRESULT CALLBACK WindowProc(/*函数名字可以更改,但是参数不允许改变*/

HWNDhwnd,

UINTuMsg,

WPARAM wParam,

LPARAM lParam

)//参数和消息结构提的前四个参数相同,事实上系统在调用窗口过程函数

//的时候自动将消息结构体的前四个参数传递到窗口过程


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7948299.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存