对话框控件和对话框的绑定
基于Windows SDK建立对话框和一些常用控件,问题:
1)对话框的创建?
2)对话框的控件如何初始化?
3)对话框的控件如何绑定到对话框窗口?
一、对话框的创建
对话框分为模态对话框和非模态对话框,这俩者的区别许多资料里都有详细的说明。
模态对话框获得输入焦点后之道点击OK或者Cancel后才会把焦点释放,在模态对话框设置期间其他程序不能获得焦点,这样的好处是达到了利用对话框和用户交流的目的。非模态对话框的例子就是当用notepad编辑文档,当要关闭时会弹出一个对话框提示是否要保存,这个对话框就是一个典型的模态对话框。
非模态对话框调用之后立即返回,并不持续占用输入焦点,那么可以同时开多个非模态对话框。
创建埋汰对话框与船舰窗口的区别:
创建模态对话框并不像窗口的创建:注册->创建->显示->窗口处理函数这个流程,对话框的模板系统已经注册好了,我们直接创建就可以。关键是创建了对话框之后的回调函数如何处理,怎么绑定回调函数?
创建模态对话框的API函数:
(1)DialogBox:
INT_PTR DialogBox( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
这个函数根据系统对话框模板创建一个模态对话框,其中参数的含义如下:
hlnstance:标识一个模块的事例该模块的可执行文件含有对话框模板。 IpTemplate:标识对话框模板。此参数可以是指向一个以NULL结尾的字符串的指针,该字符串指定对话框模板名,或是指定对话框模板的资源标识符中的一个整型值。如果此参数指定了一个资源标识符则它的高位字一定为零,且低位字一定含有标识符。一定用MAKEINTRESOURCE宏指令创建此值。 hWndParent:指定拥有对话框的窗口。 IpDialogFunc:指向对话框过程的指针。有关更详细的关于对话框过程的信息,请参见DialogProc
(2)DialogBoxParam
INT_PTR DialogBoxParam( HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
LPARAM dwInitParam
);
该函数和DialogBxo相似,只是多了一个最后的参数,用来传递信息。
这两个函数都是通过CreateWindowEx来创建对话框的,而CreateWindowEx是CreateWindow的另外一个函数,高级函数,是微软后来封装的。
(3)CreateDialog 创建非模态对话框
HWND CreateDialog( HINSTANCE hInstance,
LPCTSTR lpTemplate,
HWND hWndParent,
DLGPROC lpDialogFunc
);
The CreateDialog macro creates a modeless dialog box from a dialog box template resource. The CreateDialog macro uses the CreateDialogParam function
(4)CreateDialogParam 创建非模态对话框
HWND CreateDialogParam( HINSTANCE hInstance,
LPCTSTR lpTemplateName,
HWND hWndParent,
DLGPROC lpDialogFunc,
LPARAM dwInitParam
);
这些函数调用后会发送WM_INITDIALOG消息来初始化对话框,这个消息由系统派遣到对话框回调函数进行处理。
比如:
下面的代码是用CreateWindowEx创建一个对话框
// CreateDialog.cpp : Defines the entry point for the application.
//
#include <Windows.h>
#define MAX_LOADSTRING 100
// Global Variables:
static TCHAR szTitle[MAX_LOADSTRING] = TEXT("Test"); // The title bar text
WNDPROC hWndProc;
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
PSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: Place code here.
MSG msg;
//HACCEL hAccelTable;
// Perform application initialization:
HWND hWnd = CreateWindowEx(WS_EX_APPWINDOW, TEXT("#32770"), szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
//Set callback function
hWndProc = (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)(WNDPROC)WindowProc);
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK WindowProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_CLOSE:
DestroyWindow(hWnd);
return 0;
case WM_DESTROY:
PostQuitMessage (0);
break;
default:
return CallWindowProc(hWndProc, hWnd, uMsg, wParam, lParam);
}
return 0;
}
输出结果是建立一个空的模态对话框。
分享到:
相关推荐
3. **事件处理**:绑定和处理对话框的打开、关闭、确认、取消等事件,实现业务逻辑。 4. **本地化**:检查资源文件中的文本是否符合中文习惯,如果有需要,可以进一步自定义。 5. **测试**:在多种浏览器和设备上...
通过学习和实践这个示例,开发者能够更好地理解如何在VS2015的MFC项目中处理对话框控件的变量绑定及数据验证,提高应用程序的用户体验和数据准确性。对于新手开发者来说,这是一个非常实用的教程,可以帮助他们快速...
在Microsoft Foundation Classes (MFC)库中,对话框和控件是构建用户界面的重要组成部分。MFC是一个C++类库,它为Windows API提供了一层抽象,使得开发Windows应用程序更加方便。下面,我们将深入探讨MFC对话框和...
通过分析和模仿这些代码,初学者可以更好地理解和掌握MFC对话框控件的使用。例如,你可能会看到如何创建一个带有输入字段的对话框,以及如何在用户点击“确定”按钮时读取并验证这些输入。 总的来说,掌握MFC对话框...
C++ 对话框和控件,针对很多东西进行了解析,相当好的东西,值得参考!希望对你有用!
在这个“asp.net漂亮弹出对话框控件源码及示例”中,我们可以期待学习到如何在ASP.NET应用中实现美观且功能丰富的弹出对话框。 弹出对话框是用户界面中的一个重要元素,它能够提供额外的信息或者进行交互操作,而...
此外,它还涉及了编程模式上的知识,如函数的参数设计、事件绑定和处理、以及在动态网页环境中,对页面元素进行动态显示和隐藏的控制。这些知识点对于前端开发来说是基础且重要的,对于提高前端开发的效率和质量也...
- 对话框初始化涉及构造函数、`WM_CREATE`消息函数和`WM_INITDIALOG`消息处理函数,尤其是`OnInitDialog()`,它是`DoModal()`调用的,用于初始化对话框控件。 **对话框数据交换DDX(Dialog Data Exchange)和验证...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC)库来实现一个基于对话框的应用程序,并且重点介绍如何操作和使用基本的对话框控件。MFC是微软为Windows应用程序开发提供的一种C++类库,它封装了...
3. **事件处理**:讲解如何绑定和触发对话框相关的事件,如`onOpen`、`onClose`等。 4. **高级用法**:包括异步加载内容、嵌入iframe、自定义模板等功能的实现方法。 5. **常见问题与解决**:提供常见问题的解决...
- 重载DoDataExchange():这个函数用于在对话框控件和类成员变量之间进行数据交换。我们需要在这里指定每个控件对应的成员变量,以便在对话框显示和关闭时进行数据同步。 3. **Windows标准控件与通用控件的使用** ...
这种对话框通常包含发送者和接收者的头像、昵称、消息内容以及时间戳等关键信息,为用户提供了一个清晰、直观的聊天环境。 在创建这样的对话框时,我们需要考虑以下几个核心知识点: 1. **对话框设计**:对话框是...
1. **控件的锚定(Docking)**:锚定允许我们将控件绑定到对话框的边缘,当对话框大小变化时,这些控件会自动沿绑定的边缘扩展或收缩。Windows API并没有直接提供锚定功能,但可以通过MFC(Microsoft Foundation ...
在标题提到的“向导对话框”中,我们可以理解为这是一种预设好结构和交互逻辑的对话框控件,它通常由多个页面组成,每个页面代表一个步骤,用户按照顺序进行操作。这样的设计有助于分解复杂任务,使用户能够逐步理解...
在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库中的一个重要控件,用于在模态对话框或非模态对话框中显示列表视图。模态对话框是一种阻止用户与应用程序其他部分交互,直到用户对对话框进行...
例如,`CreateDialogIndirect`和`DialogBoxParam`函数可以用来创建和显示自定义对话框,而`WM_INITDIALOG`消息处理则用于在对话框初始化时设置控件的初始状态。此外,`SetWindowLong`和`GetWindowLong`函数用于获取...
总之,XAML对话框控件结合MVVM,使我们在WPF中可以创建高效、可维护的用户界面,同时也提高了开发效率和用户体验。通过学习和实践这些技术,开发者可以更好地掌握WPF和MVVM的精髓,从而构建出更优秀的桌面应用程序。
6. **实现数据交换**:为了在对话框控件和应用程序的数据模型之间进行数据交换,你需要使用MFC的DDX(Dialog Data Exchange)和DDV(Dialog Data Validation)机制。在属性页的`OnInitDialog()`和`OnOK()`函数中,...
6. **使用MFC库**:如果使用Microsoft Foundation Class (MFC) 库,可以利用CDataExchange类的成员函数`DoDataExchange`进行数据绑定,同时利用CDialogEx类的`OnGetMinMaxInfo`处理最小化和最大化事件,以实现控件的...
此外,可以重写DoDataExchange()函数来进行数据成员与对话框控件之间的双向绑定。 在代码中实例化并显示对话框有两种方式:模态对话框和非模态对话框。模态对话框(如CDialog::DoModal())会阻塞用户对父窗口的操作...