| 发表于:2007-01-31 13:42:13 楼主 |
用windows sdk实现过可滚动的窗口(scrollwindow)的读者都知道,实现一个scrollwindow真不是一件容易的事情。你得响应好多好多的滚动条消息,还要处理鼠标滚轮。现在,你用winx则只需要3步完成: 让你的类从scrollwindow <> 继承。 实现一个名为dopaint的函数。其原型为:void dopaint(winx::dchandle dc); 这个函数功能是绘制整个视图,包括那些滚出屏幕之外的区域。其实实际上你应该把dopaint理解为在以一个虚拟的不带滚动条的视图(view)中绘制。 告诉winx你的虚拟视图(view)有多大。这可以通过setscrollsize函数完成。 至此,一切搞定。我们看一个最简单的例子: #include <winx/scrollwindow.h> #include “resource.h“ // ————————————————————————- // class cmyview class cmyview : public winx::scrollwindow <cmyview> { winx_class(“myview“); public: lresult oncreate(hwnd hwnd, lpcreatestruct lpcs) { setscrollsize(800, 800); return 0; } void dopaint(winx::dchandle dc) { dc.textout(1, 1, _t(“hello, winx!“)); dc.textout(1, 300, _t(“you are welcome!“)); } }; // ————————————————————————- // chellodlg class chellodlg : public winx::modaldialog <chellodlg, idd_hello> { }; // ————————————————————————- int apientry winmain(hinstance hinstance, hinstance hprevinstance, lpstr lpcmdline, int ncmdshow) { cmyview::registerclass(); chellodlg dlg; dlg.domodal(); return 0; } 这里我不再解释整个程序的流程。如果你不能理解为什么没有地方去创建cmyview类,建议你去看看前面winx相关的文章。例如: 剖析winx的hello程序 winx如何做到可视化界面开发 更多… 这里我们关注cmyview类。当然,这个例子有过于简单,虚拟的视图(view)大小始终为800×800,不太符合实际的情况。复杂一点的,我们这里就不贴代码了,请参考winx带的例子。关于scrollwindow相关的,我们提供了4个: scrollwindow(basic) tutorials/winx/step019-scroll-window/1.basic 一个简单的图象浏览器 tutorials/winx/step019-scroll-window/2.imageview (*) formview(支持滚动的对话框) tutorials/winx/step019-scroll-window/3.formview zoomview(zoomscrollwindow) tutorials/winx/step019-scroll-window/4.zoomview 注:由于带(*)项目使用了gdiplus,如果你使用vc++6.0,需要更新到最新的winsdk。 特别推荐上面的简单图像浏览器。代码才100多行,功能可不弱哦。另外,formview在mfc中叫cformview,winx我们叫formwindow(这个类wtl中没有对应的)。 转http://www.winxcn.com/blog/?p=33 |
|
|
|
|