• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1735
  • Last Modified:

HWND of a CDialog...

Hey,
Continuing with my problem for having a CDialog automatically closed after a while, I need to pass the handle  window parameter of the CDialog I want to send the message WM_CLOSE.
I have spend plenty of hours searching for a way to have the HWND of that Dialog unsucessfully.
I have already have some help from WxW but it seems he use to develop with Borland. I am using Visual C++ v5. Someone has some more info ???
Here is a part of my CDialog definition :
/////////////////////////////////////////////////////////////////////////////
// CLogin_Dlg message handlers

/////////////////////////////////////////////////////////////////////////////
// COpen_dlg dialog


COpen_dlg::COpen_dlg(CWnd* pParent /*=NULL*/)
      : CDialog(COpen_dlg::IDD, pParent)
{
      //{{AFX_DATA_INIT(COpen_dlg)
            // NOTE: the ClassWizard will add member initialization here
      //}}AFX_DATA_INIT
  Timer = ::SetTimer( "CDialog HWND",0,1000,(TIMERPROC)Timer_Proc);

}


void COpen_dlg::DoDataExchange(CDataExchange* pDX)
{
      CDialog::DoDataExchange(pDX);
      //{{AFX_DATA_MAP(COpen_dlg)
            // NOTE: the ClassWizard will add DDX and DDV calls here
      //}}AFX_DATA_MAP

}


BEGIN_MESSAGE_MAP(COpen_dlg, CDialog)
      //{{AFX_MSG_MAP(COpen_dlg)
      ON_BN_CLICKED(IDC_BUTTON1, On_OpenButton)
      //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
0
wwalschaerts
Asked:
wwalschaerts
  • 2
  • 2
1 Solution
 
nietodCommented:
Th handle should be in the m_hWnd member.
0
 
stefanrCommented:
The HWND does not exist yet in the Constructor. You have to delay the creation of the timer to OnInitDialog. By that time the HWND exist. Alternatively you could do that in the OnCreate message function, after the default OnCreate have been called.
In any way, using the member function GetSafeHwnd (or using the member variable m_hWnd directly) returns the handle of the dialog at those times.

I would rather send a message WM_COMMAND simulating the OK/Cancel buttons to close the dialog, though, if it is a modal one.
0
 
nietodCommented:
Note you need the dialog's handle only if you are using the ::SendMessage()  windows API.  You use the dialog object if you are using the MFC SendMessage() member procedure.
0
 
stefanrCommented:
BTW, since you are using a Timer procedure, you won't get a WM_TIMER event to the dialog (and hence no OnTimer will be called). The Timer procedure should be NULL if that is what you want.
0
 
wwalschaertsAuthor Commented:
Great ! it's working !
Thanks.
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now