MFC中怎样从一个线程中获取当前主窗口的句柄

MFC中怎样从一个线程中获取当前主窗口的句柄,第1张

这个函数返回了CWinThread指针,它的一个成员m_hThread就是线程句柄再次执行你就要再调用AfxBeginThread,因为如果线程结束了,那你得到的句柄其实已经无效了

1 在多文档多视图的MFC架构中,要想获得当前选中的CView可重写CView::OnActivateView函数,如下:

void

OnActivateView(BOOL bActivate,

CView pActivateView,

CView pDeactiveView)

{

if(bActivate)

{

SetEnable(TRUE);

}

else

{

SetEnable(FALSE);

}

CView::OnActivateView(bActivate,

pActivateView,

pDeactiveView);

}

2 获得窗口或者视图句柄

2.1 获得窗口句柄

要找到某个CWnd对象的HWND,用GetSafeHwnd()。

在窗口类中,有句柄的成员变量,可以直接访问: m_hWnd

在窗口类外,可以用AfxGetMainWnd()->m_hWnd获得。

在MainFrame里直接用this;

其它地方用 CMainFrame pMainFrame = (CMainFrame)theAppm_pMainWnd;

想得到一个控件的的句柄

GetDlgItem(ID…)->m_hWnd

2.2 获得视图的句柄

AfxGetMainWnd()->GetActiveView();

SDI: ((CFrameWnd)(AfxGetApp()->m_pMainWnd))->GetActiveView();

MDI: ((CFrameWnd)(AfxGetApp()->m_pMainWnd))->GetActiveFrame()->GetActiveView();

void CMy1128Dlg::OnBnClickedButton1()//按钮响应函数

{

CreateThread( NULL, 0, ThreadFunc, this, 0, 0 );//将对话框指针传入线程函数

//GetDlgItem(IDC_Picture);//在这里不需要第一个参数,能用。

}

DWORD WINAPI ThreadFunc( LPVOID lpParam )//线程函数

{

CMy1128Dlg pDlg = (CMy1128Dlg )lpParam;

CWnd pwnd = pDlg->GetDlgItem(IDC_Picture);

}

GetDlgItem()//只有一个参数就是你要获取的子窗口的ID,返回值是一个指向CWnd类的指针.该函数可以根据一个ID号获取一个对应的对象指针,在任何派生自CWnd类的类中都可以使用.如果你非要句柄的话.那就

CWnd pWnd= GetDlgItem(/子窗口ID/);

pWnd->m_HWnd;//得到这个子窗口的句柄

以上就是关于MFC中怎样从一个线程中获取当前主窗口的句柄全部的内容,包括:MFC中怎样从一个线程中获取当前主窗口的句柄、mfc中创建分割视图怎么获取视图窗口句柄、MFC中怎样获得句柄等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9512624.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存