CWindowImpl and dynamically created button
"imperialgeniusx" <imperialgeniusx-/[email protected]>
| Newsgroups | gmane.comp.windows.wtl |
|---|---|
| Message-ID | <[email protected]> |
Hi all,
I'm new to WTL and implementing custom controls and have been having some difficulty with what SHOULD be a pretty straightforward thing: adding a button to a CWindowImpl and then having the button respond to clicks and generate events. For some reason, this simply doesn't happen.
The basic hierarchy I have is
CFrameWindowImpl
CWindowImpl (1)
CWindowImpl (2)
CButton (4)
CButton (3)
The numbers reflect the order things are created: everything is dynamically created, and (2) and (3) are created at the same time as children of (1), and (4) is created on demand later on as a child of (2).
When I display (1) and click on (3), I get WM_COMMAND messages. When I click on (2) anywhere other than the drawing area of (4), I get WM_LBUTTONDOWN and WM_LBUTTONUP messages. (4) is correctly drawn: I get WM_PAINT messages and the button appears in the CWindowImpl area correctly. However when I click on (4) I get nothing: no WM_LBUTTONDOWN, WM_LBUTTONUP or anything of that ilk.
(2) is created using the following code:
CVerticalLayout * _display = new CVerticalLayout(m_hWnd, IDC_DETAILS_LAYOUT);
where CVerticalLayout is based on CWindowImpl. The constructor for CVerticalLayout does this:
this->Create(parent, NULL, L"VerticalLayout", WS_CHILD|WS_VISIBLE|WS_TABSTOP,0,uID);
and uses the following declarations/message map
DECLARE_WND_SUPERCLASS(_T("VerticalLayout"), GetWndClassName())
BEGIN_MSG_MAP(CVerticalLayout)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_VSCROLL, OnVScroll)
MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
END_MSG_MAP()
(3) is created using the following code:
CButton _action;
_action.Create(this->m_hWnd,NULL, szDownload, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,ID_DETAILS_ACTION);
and (4) is created using this:
RECT rc;
rc.top = 0; rc.bottom = 30; rc.left = 0; rc.right = 150;
CButton wnd;
wnd.Create(_display->m_hWnd, rc, _T("TEST"), WS_CHILD|WS_VISIBLE,0,ID_TEST_ACTION);
Is this something that anyone else has seen before, or is there a magic setting somewhere I need to deploy to make this do the right thing? I thought that if (3) works then (4) should just work, but this doesn't seem to be the case. I don't even get the default button action when clicked. I get absolutely nothing. I've looked at this using Spy and it confirms that no messages are being sent to any of the windows in the application when I hover over the button's paint area and click, but messages are sent when I click anywhere else on the application.
Thanks,
Imp.
------------------------------------
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/wtl/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/wtl/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:[email protected]
mailto:[email protected]
<*> To unsubscribe from this group, send an email to:
[email protected]
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/