2016-11-16 9 views
1

私は外部dll関数を呼び出す単純なMFCダイアログタイプのウィンドウを持っており、パラメータの1つはコールバック関数です。それは関数パラメータからの情報を使用して作成し、更新ラベルされていない場合、コールバック関数は、別のダイアログウィンドウを作成します。MFCダイアログフォームフリーズ

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はグローバル変数であり、1つの静的なラベルを持つ、非常に単純なMFCダイアログフォームです。そしてそれは1つの特徴を持っています - それは一番上に置かれます。

コールバック時にダイアログフォームが表示され、ラベルに必要な情報が表示されます。しかし、マウスでフォームを移動しようとすると、下の図のように凍ったようになり、ラベルに関する情報はもう更新されません。なぜこれが起こるのですか?この問題を解決するには?

enter image description here

答えて

0

あなたがStatusDlgを作成するとき、あなたはそれをデスクトップの親を与えます。これは間違っている可能性が高く、後の問題につながります。 2番目のダイアログの親は、それを呼び出すメインダイアログでなければなりません。

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

あなたがuserNotifyを呼び出すときに、親ウィンドウのポインタは、単にthisポインタになります。