ATL3.0中的窗口类
2006-07-22 22:53:41 来源:WEB开发网理解了ATL中的窗口对象和Windows系统中窗口的区别,就更加容易理解CWindow对象的构造与窗口的创建是两个分开的过程。我们再看看前面的代码,就会发现,首先是一个CWindow对象被构造: CWindow win;
然后创建它的窗口:win.Create( "button", NULL, CWindow::rcDefault, "Click me",
我们也可以构造一个CWindow对象,然后把它和一个已经存在的窗口关联起来,这样我们就可以通过CWindow类的成员函数来操作这个已经存在的窗口。这种方法非常有用,因为CWindow类提供的函数都是封装好了的,用起来很方便,比如CWindow类中的CenterWindow, GetDescendantWindow等函数用起来就比直接使用Windows API方便得多。
WS_CHILD );HWND hWnd = CreateWindow( szWndClass, "Main window",
CWindow类也提供了一个HWND操作符,可以把CWindow类的对象转化为窗口句柄,这样,任何要求使用HWND的地方都可以使用CWindow类的对象代替:
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
// 下面的方法中可以任选一种:
// CWindow win( hWnd ); // 通过构造函数关联
// 或
// CWindow win;
// win = hWnd; // 通过赋值操作符关联
// 或
// CWindow win;
// win.Attach( hWnd ); // 使用Attach()方法关联
win.CenterWindow(); // 现在可以使用win对象来代替hWnd进行操作
win.ShowWindow( nCmdShow );
win.UpdateWindow();::ShowWindow( win, nCmdShow ); // 此API函数本来要求HWND类型的参数
CWindow类使得对窗口的操作更简单,而且不会增加系统开销——它经过编译和优化后的代码与使用纯API编程的代码是等价的。
更多精彩
赞助商链接