您的位置:程序门 -> windows专区 -> windowslive



如何用winx实现可滚动的窗口(scrollwindow)


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何用winx实现可滚动的窗口(scrollwindow)[已结贴,结贴人:yanglilibaobao]
发表于: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
发表于:2007-02-01 10:33:121楼 得分:50
up
发表于:2007-02-05 17:50:082楼 得分:50
老大專找冷僻的地方來散分,////////


快速检索

最新资讯
热门点击