`
weihe6666
  • 浏览: 440188 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

对话框控件和对话框的绑定

阅读更多
对话框控件和对话框的绑定


基于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;
}

输出结果是建立一个空的模态对话框。
分享到:
评论

相关推荐

    Asp.net弹出对话框控件汉化修正版_popupwin.zip

    3. **事件处理**:绑定和处理对话框的打开、关闭、确认、取消等事件,实现业务逻辑。 4. **本地化**:检查资源文件中的文本是否符合中文习惯,如果有需要,可以进一步自定义。 5. **测试**:在多种浏览器和设备上...

    对话框控件的变量绑定.rar

    通过学习和实践这个示例,开发者能够更好地理解如何在VS2015的MFC项目中处理对话框控件的变量绑定及数据验证,提高应用程序的用户体验和数据准确性。对于新手开发者来说,这是一个非常实用的教程,可以帮助他们快速...

    MFC对话框和控件源代码

    在Microsoft Foundation Classes (MFC)库中,对话框和控件是构建用户界面的重要组成部分。MFC是一个C++类库,它为Windows API提供了一层抽象,使得开发Windows应用程序更加方便。下面,我们将深入探讨MFC对话框和...

    MFC_对话框控件_学习使用

    通过分析和模仿这些代码,初学者可以更好地理解和掌握MFC对话框控件的使用。例如,你可能会看到如何创建一个带有输入字段的对话框,以及如何在用户点击“确定”按钮时读取并验证这些输入。 总的来说,掌握MFC对话框...

    C++ 对话框和控件

    C++ 对话框和控件,针对很多东西进行了解析,相当好的东西,值得参考!希望对你有用!

    asp.net漂亮弹出对话框控件源码及示例

    在这个“asp.net漂亮弹出对话框控件源码及示例”中,我们可以期待学习到如何在ASP.NET应用中实现美观且功能丰富的弹出对话框。 弹出对话框是用户界面中的一个重要元素,它能够提供额外的信息或者进行交互操作,而...

    自己使用js/jquery写的一个定制对话框控件

    此外,它还涉及了编程模式上的知识,如函数的参数设计、事件绑定和处理、以及在动态网页环境中,对页面元素进行动态显示和隐藏的控制。这些知识点对于前端开发来说是基础且重要的,对于提高前端开发的效率和质量也...

    vc对话框和控件10分钟入门(原创,课堂讲稿)

    - 对话框初始化涉及构造函数、`WM_CREATE`消息函数和`WM_INITDIALOG`消息处理函数,尤其是`OnInitDialog()`,它是`DoModal()`调用的,用于初始化对话框控件。 **对话框数据交换DDX(Dialog Data Exchange)和验证...

    实现MFC对话框应用 基础控件

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC)库来实现一个基于对话框的应用程序,并且重点介绍如何操作和使用基本的对话框控件。MFC是微软为Windows应用程序开发提供的一种C++类库,它封装了...

    artDialog对话框控件

    3. **事件处理**:讲解如何绑定和触发对话框相关的事件,如`onOpen`、`onClose`等。 4. **高级用法**:包括异步加载内容、嵌入iframe、自定义模板等功能的实现方法。 5. **常见问题与解决**:提供常见问题的解决...

    mfc对话框及控件使用

    - 重载DoDataExchange():这个函数用于在对话框控件和类成员变量之间进行数据交换。我们需要在这里指定每个控件对应的成员变量,以便在对话框显示和关闭时进行数据同步。 3. **Windows标准控件与通用控件的使用** ...

    类似QQ消息框的对话框

    这种对话框通常包含发送者和接收者的头像、昵称、消息内容以及时间戳等关键信息,为用户提供了一个清晰、直观的聊天环境。 在创建这样的对话框时,我们需要考虑以下几个核心知识点: 1. **对话框设计**:对话框是...

    可适配控件的对话框

    1. **控件的锚定(Docking)**:锚定允许我们将控件绑定到对话框的边缘,当对话框大小变化时,这些控件会自动沿绑定的边缘扩展或收缩。Windows API并没有直接提供锚定功能,但可以通过MFC(Microsoft Foundation ...

    向导对话框

    在标题提到的“向导对话框”中,我们可以理解为这是一种预设好结构和交互逻辑的对话框控件,它通常由多个页面组成,每个页面代表一个步骤,用户按照顺序进行操作。这样的设计有助于分解复杂任务,使用户能够逐步理解...

    模态对话框上CLISTCTRL控件的使用

    在Windows编程中,CListCtrl是MFC(Microsoft Foundation Classes)库中的一个重要控件,用于在模态对话框或非模态对话框中显示列表视图。模态对话框是一种阻止用户与应用程序其他部分交互,直到用户对对话框进行...

    在打开对话框上加控件

    例如,`CreateDialogIndirect`和`DialogBoxParam`函数可以用来创建和显示自定义对话框,而`WM_INITDIALOG`消息处理则用于在对话框初始化时设置控件的初始状态。此外,`SetWindowLong`和`GetWindowLong`函数用于获取...

    XAML对话框控件:在WPF中启用MVVM和对话框

    总之,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`处理最小化和最大化事件,以实现控件的...

    MFC对话框的使用

    此外,可以重写DoDataExchange()函数来进行数据成员与对话框控件之间的双向绑定。 在代码中实例化并显示对话框有两种方式:模态对话框和非模态对话框。模态对话框(如CDialog::DoModal())会阻塞用户对父窗口的操作...

Global site tag (gtag.js) - Google Analytics