WEB开发网
开发学院软件开发VC ATL3.0中的窗口类 阅读

ATL3.0中的窗口类

 2006-07-22 22:53:41 来源:WEB开发网   
核心提示: 理解了ATL中的窗口对象和Windows系统中窗口的区别,就更加容易理解CWindow对象的构造与窗口的创建是两个分开的过程,ATL3.0中的窗口类(2),我们再看看前面的代码,就会发现,这样,任何要求使用HWND的地方都可以使用CWindow类的对象代替: ::ShowWindow( w

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

上一页  1 2 3 4 5 6 7  下一页

Tags:ATL 窗口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接