您的位置:首页 > 其它

win32开发(对话框启动)

2017-12-21 08:14 190 查看
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

    有过mfc开发经验的朋友都知道,在mfc下面有三种app开发的方式,它分别是mdi开发、sdi开发和dialog based开发。尤其是最后一种,这种基于对话框的开发方法常常用来进行简单工具的开发工作。那么,疑问来了,是不是可以用纯win32进行对话框的基本开发呢?答案是肯定,下面我们就来看一下怎么可以达到这一点。

    大家如果还有印象的话,传统win32 app的开发流程是这样的,首先注册一个WNDCLASSEX,接着创建窗口,最后就是接收消息、处理消息,所有消息都是在wndProc里面解决。那对话框怎么弄呢,其实更简单,它除了不再需要注册WNDCLASSEX之外,剩下来的流程都是一样的,
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MSG msg;

HWND hWnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), NULL, (DLGPROC)About);
ShowWindow(hWnd, nCmdShow);

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);

}

return msg.wParam;
}

    从代码中,大家可以发现,基于对话框的开发更简单。整个流程就是两个部分,一个是创建对话框,另外一个是获取消息、处理消息。那么消息在什么地方处理呢?其实就在CreateDialog里面注册的函数指针About这里处理,
// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
PostQuitMessage(0);
break;
}
return FALSE;
}
    对话框没有实现什么功能,主要就是对WM_INITDIALOG和WM_COMMAND两个消息进行处理。当然,如果大家需要在对话框里面添加什么控件的话,只需要在About填上对应的消息处理逻辑就可以了。

    从上面的代码来看,基于对话框的应用开发其实也不复杂。只是大家mfc用多了,自身对工具和平台产生了依赖。从个人发展来说,这其实是很不利的。win32开发虽然花的时间多了一些,但是对原理和流程可以理解得很透彻,这一点是mfc比不了的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: