今天多线程编程练习中的一些收获

时间:2021-08-21 19:04:10

尝试把<<深入浅出MFC>>中第14章的那个多线程例子编出来,不过弄了一天也还是不知道如何获取SDI中那个视图的handle.不过今天也学到了不少得到窗口handle的方法,下面总结一下:

第一种方法:CWnd这个类中有一个成员属性m_hWnd,它是用来保存窗口句柄的.CView继承了CWnd,SDI中的那个视图类继承了CView.所以我们通过访问m_hWnd就可以得到窗口的句柄了.

第二种方法:使用FindWindw和FindWindowEX这两个API.

HWND FindWindow(LPCTSTR lpClassName, LPCTSTR lpWindowName) 

HWND FindWindowEx(HWND hwndParent, HWND hwndChildAfter,LPCTSTR lpClassName, LPCTSTR lpWindowName)

这两个API是通过类名和窗口标题来获取窗口的句柄的.

第三种方法:获取当前鼠标光标位置的窗口的句柄.

ClientToScreen(&point);
CWnd* pWnd = CWnd::WindowFromPoint(point);

HWND hwndCurr = pWnd->GetSafeHwnd();

上面三行代码就可以获取当前鼠标位置所在窗口的窗口句柄.

还有其它很多种获得窗口句柄的方法,不过暂时不会总结,以后再补充吧.

再来说说今天遇到的其它问题吧.

GetDC(hWnd)用来返回窗口的句柄,如果输入参数为0的话,就反回整个屏幕(显示器屏幕)的句柄.

定义全局变量的时候不要在头文件中定义,应该在源文件中定义.

当类成员函数被声明为static的时候,则在这个函数里面不能使用另一个类里面的成员变量.

唉,不说了,好像这样说了没啥意义.