use*_*358 5 c++ windows resources winapi
没有资源,我可以创建与UI一系列复杂的CreateWindow()和CreateWindowEx(),以及WndProc()处理我的事件.
我注意到如果我在资源视图中右键单击并单击"添加资源",我可以绘制一个包含所有控件的对话框.如果我可以像通常使用C#那样绘制界面,这将节省我大量的时间.
在我使用资源编辑器绘制界面后,如何从代码创建窗口?有人可以用一个按钮提供一个非常简单的例子,并说明如何处理该按钮上的WM_COMMAND事件吗?
此外,人们通常如何创建GUI?这样做是否有灵活性的损失?即使在C#中,我经常需要使用我自己的代码生成的UI来补充设计器生成的UI,但是大多数时候我很乐意使用设计器.
在资源编辑器中创建对话框后,调用CreateDialog(无模式对话框;您需要手动调度消息,就像使用时一样CreateWindow)或DialogBox(模态对话框;在关闭对话框之前函数不会返回.它会为您调度)使对话框显示出来.就像您将窗口proc传递给RegisterClass一样,您将对话框proc传递给那些用于对话框回调的函数.DialogProc的一个例子看起来像这样:
BOOL DialogProc( HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam ){
switch( iMessage ){
case WM_COMMAND:
switch( LOWORD( wParam ) ){
case BTOK:
MessageBox( hDlg, "Hello, World!", NULL, NULL );
return TRUE;
break;
}
break;
}
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
这是创建对话框的基本方法.更复杂的方法通常涉及OOP,通常将每个资源(按钮,窗口等)包装为C++对象或使用MFC.