1
votes

I have simple MFC dialog type window that calls external dll function and one of parameters is callback function. Callback function creates another dialog window if it is not created and updates label with information from function parameter:

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 is global variable and is very simple MFC dialog form with one static label. And it has one feature - it is placed on topmost.

    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
    }

Dialog form is shown during callback and label shows required information. But if I try to move form with mouse it becomes like frozen like in picture below and information on label is not updated anymore. Why this happens? How to solve this problem?

enter image description here

1

1 Answers

0
votes

When you create StatusDlg you give it a parent of the Desktop. That is very likely wrong and leads to your later issues. The parent of your second dialog should be the main dialog that invokes it.

int userNotify ( CWnd *pParentWnd, int iNotificationType, char* pcNotificationText )
{
...
statusDlg->Create(StatusDlg::IDD, pParentWnd);
...
}

The parent window pointer will simply be the this pointer when you call userNotify.