Step by step——WinX开发入门教程-3

修改使得入口函数为WinMain

目的

去掉运行时出现的控制台窗口,将程序入口函数改为WinMain

步骤

修改main入口函数为WinMain,如下:

int APIENTRY _tWinMain(HINSTANCE hInstance,

                     HINSTANCE hPrevInstance,

                     LPSTR     lpCmdLine,

                     int       nCmdShow)

{

注意APIENTRY,这是WinMain的调用约定。可以试试看不加这个约定会出现什么情况。

编译,错误,提示如下:

1>Linking...

1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup

原因

连接器还是去找main入口函数了。如何告诉连接器不要找main而去找WinMain呢?

修改项目属性,在linker组,修改System页面,将subsystem修改为Windows

题外话:

一般所说的编译,其实包含了对源代码编译成目标码(.obj)和将目标码链接成exe这两步。第一步错误,不会做第二步。有些时候,这些错误与项目配置相关,需要修改这些配置,经常是在属性窗口里从头看到尾找对应的配置项。其实,一个标准可以减少查看范围,编译期出错,只看C/C++,链接出错,只看Linker

重新编译,ok。可以正常运行。

 

增加按钮事件处理函数

目的

在对话框上增加一按钮,当用户点击时,弹出messagebox

思考

Winx的消息处理机制是学习winx开发的基础。明了该机制后就可以比较轻松的做我们想完成的事情。如果对消息处理机制不清楚的,可以看其他文档。

简单说起来,消息处理机制就是利用模板特性,做到编译器定型,当子类需要处理某消息时,则按照消息处理函数名称契约,完成函数编写,winx最终将调用到我们自己的函数。不需要像MFC一样,也不需要像SDK一样,需要将消息和函数联系起来,仅仅需要遵守一个规则,函数名称和参数符合契约。

为了处理按钮事件,则需要处理WM_COMMAND消息。该消息对应的函数名称为OnCommand

步骤

在对话框上增加一个按钮IDC_BUTTON1

CMyDialog类中增加

BOOL winx_msg OnCommand(HWND hWnd, WPARAM wParam, HWND hWndCtlFrom)

{

switch(LOWORD(wParam))

{

case IDOK:

_WINX_PWND->OnOK(hWnd);

return TRUE;

case IDC_BUTTON1:

MessageBox( _T("yes") );

return TRUE;

default:

CloseDialog(hWnd, LOWORD(wParam));

}

return FALSE;

}

结果

当单击按钮时,弹出messagebox

分析

当用户单击按钮后,流程为:

用户->按钮:单击

按钮->消息:触发WM_COMMAND消息

消息->winx窗口基类:被派遣到

winx窗口基类->CMyDialog:编译时确定有OnCommand

winx窗口基类->CMyDialog:OnCommand

类似这种做法,是否比较类似SDK的做法,繁琐呢?我们需要自己动手来区分command id来源。MFC似乎比较简单呢。Winx有无类似处理方式?

有。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值