您的位置:首页 > 其它

mfc获得窗口句柄

2015-11-27 15:09 357 查看
API中的::SetTimer()原型是这样的:

UINT_PTR SetTimer(

HWND hWnd,

UINT_PTR nIDEvent,

UINT uElapse,

TIMERPROC lpTimerFunc

);

在CWnd类的继承类中,CWnd::SetTimer()默认传递了一个参数:HWND;而线程函数或者是全局函数,或者是静态成员函数,没有继承CWnd的this指针,不能直接调用;

将原来写的一个串口程序(采用定时器SetTimer(1,500,NULL))改成用线程来实现,线程函数不属于对话框类,所以需采用定时器的完整形式:SetTimer(hwnd,1,500,NULL)形式,程序所在窗口类的句柄hwnd的获取成为关键问题,采用CWnd*
pWnd=AfxGetMainWnd(); HWND hwnd=pWnd->GetSafeHwnd();即可实现

MFC中获取各个窗口的句柄

1、获取主窗口句柄

CWnd *pwnd=AfxGetMainWnd();//<==>CWnd *pwnd=AfxGetApp()->GetMainWnd();

HWND hwnd=pwnd->GetSafeHwnd();

2、子窗口句柄:

CWnd *pwnd=FindWindow(WindowName,NULL);//WindowName是子窗口的名字_T(“子窗口”)

HWND hwnd=pwnd->GetSafeHwnd();

3、获取控件句柄:

HWND hwndctrl=::GetDlgItem(mainHwnd,IDC_TREE1);

4、获取最上层窗口的句柄:

HWND mainHwnd=::GetForegroundWindow();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: