直接用CWnd* b=(CWnd *)m_hWnd; 是不是有问题。但是我又不能用FromHandle()等函数,因为
static CWnd* PASCAL FromHandle( HWND hWnd );
我现在根本没有任何一个CWnd*类型的东西,只有一个HWND,
所以用不了FromHandle.
有什么其他的方法比如用全局函数可以做到吗?
static CWnd* PASCAL FromHandle( HWND hWnd );
我现在根本没有任何一个CWnd*类型的东西,只有一个HWND,
所以用不了FromHandle.
有什么其他的方法比如用全局函数可以做到吗?
解决方案 »
- CSTRING转换
- VC连接MYSQL找不到MYSQL.H文件
- 请教一个关于网络基础的问题``
- 安装程序,运行就读取setup.ini文件。恳求各位帮忙!
- 要写一个操作扫描仪的程序,有没有人有经验,帮帮我2
- fseek(pFile, -4, 2), 这是把指针移到了什么地方.
- CFrameWnd中生成一个CSplitterWnd的,然后用CSplitterWnd控制生成一个STreeView,一个是CFormView,然后问题很多?
- wininet中HttpSendRequest函数一直返回ERROR_IO_PENDING
- 求助MSDN问题!
- 关于vc调用web server接口,using namespace MSSOAPLib30;不存在
- 如何使某个视图不能关闭了呀!——内详
- 请问:我用什么才能看发到邮箱里的CSDN邮件期刊??
CWnd *wnd=::FromHandle(hWnd);
即控件里的句柄。
::FromHandle(hWnd)这个东西可以吗?编译通不过!
CWnd* pWnd = CyourParentClass::GetSafeOwner(CyourParentClass::GetOwner(), &hWnd);
dlg.m_hWnd = 你的句柄;大概就可以用了,我手头没有VC,不能帮你调试
而我没有CWnd的东西,
----------------------------------------------
ASSERT(::IsWindow(m_hWnd)); //ok! m_hWnd是HWND类型,就是我的控件的句柄(控件dialog资源的句柄吧)
CWnd* b=(CWnd *)m_hWnd; //no errorASSERT(::IsWindow(b->m_hWnd )); //Error!
反正直接用m_hWnd是可以的,但是是HWND类型的。现在偏偏要传去CWnd*类型的出去
而我没有CWnd的东西,
----------------------------------------------
ASSERT(::IsWindow(m_hWnd)); //ok! m_hWnd是HWND类型,就是我的控件的句柄(控件dialog资源的句柄吧)
CWnd* b=(CWnd *)m_hWnd; //no errorASSERT(::IsWindow(b->m_hWnd )); //Error!==================================================================================HWND hWnd = CyourClass::GetSafeHwnd();
CWnd* pWnd = CyourParentClass::GetSafeOwner(CyourParentClass::GetOwner(), &hWnd);
.
.
举个例子:
HWND hWnd = CAboutDialog::GetSafeHwnd();
CWnd* pWnd = CDialog::GetSafeOwner(CDialog::GetOwner(), &hWnd);
我只保证你能正确获取CWnd,其它我不管.
CWnd* pWnd = CDialog::GetSafeOwner(CDialog::GetOwner(), &m_hWnd);
因为m_hWnd大概是父类的成员,类型 HWND CWindow::m_hWnd.
而且我用spy++看了,这个m_hWnd和控件的地址(就是抓的是那个对话框资源)是一个东西但是:
error C2352: 'CWnd::GetOwner' : illegal call of non-static member function
其实我看到的HWND确实是正确的,和用spy++看到的是一个东西,比如都是000E0580, class:#32770 dialog.只是直接用CWnd* b=(CWnd *)m_hWnd; 结果b->m_hWnd是没有值的。
的意图看书,你是想通过一个句柄来获得一个指向窗口的指针,那么
CWnd* hwnd = CWnd::FromHandle (m_hWnd);
应该是可以用的.看MSDN:
Returns a pointer to a CWnd object when given a handle to a window. If a CWnd object is not attached to the handle, a temporary CWnd object is created and attached. 上面就是说如果没有窗口跟该句柄联系在一起,那么会创建一个临时的窗口对象,并跟该句柄联系在一起.