【问题标题】:How to handle message send from view class to dialog?如何处理从视图类发送到对话框的消息?
【发布时间】:2019-06-12 19:23:42
【问题描述】:

我有手视图、文档和大型机的 SDI 应用程序。在视图类中,我有打开另一个对话框的按钮,比如说租船对话框。我想打开该对话框并从视图发送初始值以在对话框中分配一些变量,但我无法在对话框类中捕获消息事件。下面是我的代码:

    // button onclick to show new dialog
    charteringDlg = new CharteringDlg();
// show chartering dialog
if(charteringDlg->Create(IDD_DIALOG_CHATTERING, GetDesktopWindow()))
{
    bChartering = true;
    charteringDlg->MoveWindow(900,300,450,300);
    charteringDlg->ShowWindow(SW_SHOW); 

    int temp = 12;

    GetMain()->SendMessage(UWM_MYMESSAGE_CHARTERING, 0,(LPARAM)&temp);
}

在包租对话框中,我处理如下消息

ON_MESSAGE(UWM_MYMESSAGE_CHARTERING, &CharteringDlg::OnSetShowTemp)

包机功能

LRESULT CharteringDlg::OnSetShowTemp(WPARAM, LPARAM lParam)
{
    int * s = (int *)lParam;

    return 0;
}

我在 OnSetShowTemp() 函数处设置了断点,但它不能跳转到那里。 任何想法都将不胜感激。

【问题讨论】:

  • GetMain()->SendMessage(UWM_MYMESSAGE_CHARTERING, 0,(LPARAM)&temp); -> charteringDlg->SendMessage(UWM_MYMESSAGE_CHARTERING, 0,(LPARAM)&temp);。或者更简单:charteringDlg->thevalueorwhatever = 12.
  • 非常感谢,我不认为这很简单。如果您作为答案发布,我会接受 ^^
  • 顺便说一句,您是在创建无模式对话框还是模式对话框?如果它是无模式的,谷歌搜索 modeless dialog mfc 可能会有所帮助。关闭模式对话框后,您需要注意删除它。

标签: mfc message sdi cview


【解决方案1】:

要为对话的其中一个成员分配初始值,您无需向其发送消息。

你可以直接赋值:

所以不是

GetMain()->SendMessage(UWM_MYMESSAGE_CHARTERING, 0,(LPARAM)&temp);

你应该有类似的东西:

charteringDlg->thevalueorwhatever = 12;

顺便说一句:

GetMain()->SendMessage(UWM_MYMESSAGE_CHARTERING, 0,(LPARAM)&temp);

无论如何都是错误的,你应该将消息发送到对话框而不是主窗口:

charteringDlg->SendMessage(UWM_MYMESSAGE_CHARTERING, 0,(LPARAM)&temp);

【讨论】:

  • 或者只是公开公共方法来获取/设置变量的值并保持变量本身的私有。
猜你喜欢
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多