我有简单的MFC对话框类型窗口,它调用外部dll函数,其中一个参数是回调函数。如果未创建回调函数,则会创建另一个对话框窗口,并使用函数参数:
中的信息更新标签int userNotify ( int iNotificationType, char* pcNotificationText )
{
if(statusDlg)
{
if ( !(statusDlg->IsWindowVisible()) )
{
statusDlg->ShowWindow(SW_SHOW);
}
statusDlg->showNotification(iNotificationType,pcNotificationText);
} else
{
statusDlg = new StatusDlg(NULL);
statusDlg->Create(StatusDlg::IDD,CWnd::GetDesktopWindow());
statusDlg->ShowWindow(SW_SHOW);
statusDlg->showNotification(iNotificationType,pcNotificationText);
}
return 0;
}
statusDlg是全局变量,是一个非常简单的MFC对话框,带有一个静态标签。它有一个功能 - 它放在最顶层。
BOOL StatusDlg::OnInitDialog()
{
staticStatus = (CStatic*)GetDlgItem(IDC_STATIC_TRN_STATUS_DIALOG);
...
SetWindowPos(&this->wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
return TRUE; // return TRUE unless you set the focus to a control
}
回调期间显示对话框,标签显示所需信息。但是,如果我尝试使用鼠标移动表单,它就像下图中的冻结一样,标签上的信息不再更新。为什么会这样?如何解决这个问题?
答案 0 :(得分:0)
创建StatusDlg
时,您可以将其作为桌面的父级。这很可能是错误的,并导致您以后的问题。第二个对话框的父级应该是调用它的主对话框。
int userNotify ( CWnd *pParentWnd, int iNotificationType, char* pcNotificationText )
{
...
statusDlg->Create(StatusDlg::IDD, pParentWnd);
...
}
当您调用this
时,父窗口指针将只是userNotify
指针。