嵌套对话框过程
Nested Dialog Procedures
我不确定如何调用某些类的对话框过程,正在寻求帮助。
我知道对于正常的消息过程,您可以在 MessageProc 中执行此操作:
case WM_CREATE:
{
CREATESTRUCT* cs = (CREATESTRUCT*)_lParam;
pApplication = (CApplication*)cs->lpCreateParams;
return pApplication->MessageProc(_Msg, _wParam, _lParam);
}
这将允许您创建独立于类的消息处理。
但是,由于我不知道前两行的确切工作原理(只是它们返回应用程序的"this"指针的定义),我无法弄清楚该怎么做才能让我的对话框过程做类似的事情
case WM_INITDIALOG:
{
//How can I get the pointer to the inspector that
//I want to call the dialog proc on?
return pInspector->DlgProc(_hWndDlg, _Msg, _wParam, _lParam);
}
任何帮助既能使检查员的指针正常工作,又能准确澄清其他两行在WM_CREATE中正在做什么,将不胜感激
创建窗口时,它会收到一条WM_CREATE
消息,其中包含指向CREATESTRUCT
结构的指针,并且其中有一个指针大小的用户数据字段(lpCreateParams
)。此值来自传递给 CreateWindowEx()
函数的lpParam
参数。
这是允许您将自己的类或数据结构与窗口实例相关联的常规机制。
此指针通常需要保存在某个地方,以便以后使用它。执行此操作的一种常见方法是将其存储在窗口属性中:
case WM_CREATE:
{
CREATESTRUCT* cs = (CREATESTRUCT*)_lParam;
pApplication = (CApplication*)cs->lpCreateParams;
SetProp(hWnd, L"my.property", (HANDLE)pApplication);
}
然后在处理其他消息时检索该值:
pApplication = (CApplication*)GetProp(hWnd, L"my.property");
对话框与普通窗口不完全相同,因此尽管存在类似的机制,但它的实现方式不同。当对话框过程收到WM_INITDIALOG
消息时,lParam
值等效于WM_CREATE
消息中的lpCreateParams
值。
为了保存pInspector
值,需要在创建对话框时将其作为dwInitParam
值提供,但假设它是,您可以以类似的方式处理此问题:
case WM_INITDIALOG:
{
pInspector = (CInspector*)lParam;
SetProp(hWnd, L"my.property", (HANDLE)pInspector);
}
并在处理其他消息时检索值:
pInspector = (CInspector*)GetProp(hWnd, L"my.property");
相关文章:
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 当对话框被接受时,如何用参数调用槽
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何多次询问来自QML对话框的输入?
- 选择文件对话框错误
- 自定义对话框(源自QDialog)不会关闭(Android)
- 如何在 MFC 对话框中使用 OnDraw
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 从资源视图访问对话框时出现问题
- 如何检测窗口当前是否正在运行模式对话框?
- "最小化"按钮不会出现在 MFC 对话框中
- 如何获取QNetworkConfiguration UserChoice对话框?
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何在 VC6 中的对话框中将图标设置为按钮
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- "functions"对话框过程中的过程
- 窗口/对话框过程可以在名称空间中吗
- 嵌套对话框过程
- 在对话框消息过程中获取应用对象指针
- 将对话框过程绑定为自定义类的方法