我创建了一个复合控件
我希望能在这个控件中动态的创建一个BUTTON
我看了之前的很多贴子,一般方法如下:
mybutton.Create("button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(0,0,10,10),this,0);
而此时我的this指针指向CCATLLT* (注这个是我的复合控件的名称)
我把this改为CWND *pD = CWND::FromHandle(m_hWnd)后编译器报错;
我怎么获取这个this指针呢?
盼指教!!
我希望能在这个控件中动态的创建一个BUTTON
我看了之前的很多贴子,一般方法如下:
mybutton.Create("button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(0,0,10,10),this,0);
而此时我的this指针指向CCATLLT* (注这个是我的复合控件的名称)
我把this改为CWND *pD = CWND::FromHandle(m_hWnd)后编译器报错;
我怎么获取这个this指针呢?
盼指教!!
解决方案 »
- 在一个Dialog中,怎么操作另一个Dialog下的控件?
- VC 编辑框显示打开文档内容的代码??
- 非模态对话框的一点小问题
- 急急 请教 如何在CFormView里添加MEDIA PLAY 控件啊
- 〓〓散分帖 001:VC 版偶的 pf 对象系列:laiyiling 篇
- ATL库和 CJ60lib 冲突的问题 (在线等待。。。)
- 用ODBC操作数据库的问题?
- 如何正確分割CString.而不會把漢字截斷?
- 从没写过界面,但是又很急,希望能够能到一些指点
- 图标问题,who能解答?
- 我要对一个文件连续取,每72个字节一次。怎样取啊,指针好象不对?
- openGL中关于将gluPerspective透视投影变换为glOrtho正交投影的问题
CWND *pD = CWND::FromHandle(m_hWnd)
1、窗口类是CWnd,注意大小写;
2、CWnd::FromHandle()是将参数指定的窗口句柄绑定到一个**临时**对象,并返回该对象指针;
3、m_hWnd已经跟你的复合控件对象绑定了,你又这样调用不知道你想干嘛?那个参数是指创建按钮的父窗口,传入this,则表示以当前对象(你的复合控件)为父窗口创建按钮。如果你想以其他窗口作为父窗口创建按纽,则传入相应父窗口对象的指针即可。
或者说如何通过这个已绑定的m_hWnd获取窗口对象指针呢?
我的this指向的是(CCATLLT*),而不是(CWnd*)
public CComObjectRootEx<CComSingleThreadModel>,
public CStockPropImpl<CATLControl, IATLControl, &IID_IATLControl, &LIBID_ATLNEWLib>,
public CComControl<CATLControl>,
public IPersistStreamInitImpl<CATLControl>,
public IOleControlImpl<CATLControl>,
public IOleObjectImpl<CATLControl>,
public IOleInPlaceActiveObjectImpl<CATLControl>,
public IViewObjectExImpl<CATLControl>,
public IOleInPlaceObjectWindowlessImpl<CATLControl>,
public IConnectionPointContainerImpl<CATLControl>,
public IPersistStorageImpl<CATLControl>,
public ISpecifyPropertyPagesImpl<CATLControl>,
public IQuickActivateImpl<CATLControl>,
public IDataObjectImpl<CATLControl>,
public IProvideClassInfo2Impl<&CLSID_ATLControl, &DIID__IATLControlEvents, &LIBID_ATLNEWLib>,
public IPropertyNotifySinkCP<CATLControl>,
public CComCoClass<CATLControl, &CLSID_ATLControl>
public CComObjectRootEx<CComSingleThreadModel>,
public CStockPropImpl<CATLControl, IATLControl, &IID_IATLControl, &LIBID_ATLNEWLib>,
public CComControl<CATLControl>,
public IPersistStreamInitImpl<CATLControl>,
public IOleControlImpl<CATLControl>,
public IOleObjectImpl<CATLControl>,
public IOleInPlaceActiveObjectImpl<CATLControl>,
public IViewObjectExImpl<CATLControl>,
public IOleInPlaceObjectWindowlessImpl<CATLControl>,
public IConnectionPointContainerImpl<CATLControl>,
public IPersistStorageImpl<CATLControl>,
public ISpecifyPropertyPagesImpl<CATLControl>,
public IQuickActivateImpl<CATLControl>,
public IDataObjectImpl<CATLControl>,
public IProvideClassInfo2Impl<&CLSID_ATLControl, &DIID__IATLControlEvents, &LIBID_ATLNEWLib>,
public IPropertyNotifySinkCP<CATLControl>,
public CComCoClass<CATLControl, &CLSID_ATLControl>
然后类名定义为CATLControl
就出来这些
在CATLControl类里加入CButton m_myButton;
HWND hwndButton = ::CreateWindowEx(0, "Button", "按钮", WS_VISIBLE | WS_CHILD,
0, 0, 10, 10, m_hWnd, 0, 0, 0); //创建一个按钮,得到按钮窗口句柄
m_myButton.Attach(hwndButton); //将按钮窗口句柄绑定到按钮对象
比如用mybutton.Create("button",WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
CRect(0,0,10,10),this,nID);
可以通过nID来定制消息响应函数,,
另:为什么别人的程序能够在Active控件上通过这种方式来动态创建按钮
我也是用的ATL的复合控件啊,,郁闷中~~~~
别人用这种方式创建按钮,别人的this对象是继承自CWnd的。