尝试把<<深入浅出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的时候,则在这个函数里面不能使用另一个类里面的成员变量.
唉,不说了,好像这样说了没啥意义.