ActiveX控件的MFC设计之旅-第3步

前面说要转向属性页,突然想起好象还有一个比较有意思的东东没看,所以就先不转了,再往前走那么一小步吧
这次要看的是枚举
在VB中,我们会看到,好多控件在编辑代码的时候,会列出某一属性,或方法参数的许多可选值来,如
ListView1.BorderStyle =写到这时就会列出来ccFixedSingle和ccNone两个可选项来
它们是怎么来的呢,是的,就是枚举

在C++中,枚举的使用是很简单的,抄msdn上一段
enum Days // Declare enum type Days
 {
 saturday, // saturday = 0 by default
sunday = 0, // sunday = 0 as well
monday, // monday = 1
tuesday, // tuesday = 2
wednesday, // etc.
thursday,
friday
} today;

那么这里我们要怎么弄呢,也象上面一样用吗?用到哪?

用关键字enum查查msdn就能查到用法了,下面是msdn中的一个例子

typedef [uuid(DEADF00D-C0DE-B1FF-F001-A100FF001ED),
helpstring("Farm Animals are friendly"), helpcontext(234)]
enum {
[helpstring("Moo")] cows = 1,
pigs = 2
} ANIMALS;
在例子中,我们现在要加上一个滚动条,滚动条的枚举共4个,none,horz,vert和both

1.使用VC的Guid工具,(不出意外的话,在Tools菜单下就能找到)生成一个GUID,拷贝下来
2.打开LiteGrid.odl,在ICell接口的前面(之所以要加到前面,是因为这些枚举,可能其它接口会用到)加上
    typedef [ uuid(C9A2BD1A-AEA5-459a-BA59-5C8C3C01E403) ]
    enum
    {
        lgnone = 0,
        lghorz = 1,
        lgvert = 2,
        lgboth = 3
    } lgScroll;
上面的uuid是我生成的,如果不幸有哪位朋友也跟着想试试,请用自己生成的UUID
3.接下来定义一个属性ScrollBars,定义的时候,你并不能找到lgScroll类型,所以可以用long类型
4.接着在LiteGrid.odl中找到ScrollBars属性,将它的long类型改为lgScroll
5.编译,在VB中试试,是不是列出来了
就这么简单了
6.不过好象设置这些值没有用,当然了,没有实现代码啊,在OnScrollBarsChanged加上
    if(!::IsWindow(m_hWnd)) return;
    long l = GetWindowLong(m_hWnd, GWL_STYLE);
    if(m_scrollBars & 0x01){
        l |= WS_HSCROLL;
    }
    else{
        l &= ~WS_HSCROLL;
    }
    if(m_scrollBars & 0x02){
        l |= WS_VSCROLL;
    }
    else{
        l &= ~WS_VSCROLL;
    }
    SetWindowLong(m_hWnd, GWL_STYLE, l);
    SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOZORDER | SWP_NOSIZE | SWP_FRAMECHANGED);
    SetModifiedFlag();
再编译,再试,出来了吧
呵呵,这一步就走到这了,要下班了,88了
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页