Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192837
  • 博文数量: 90
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2017-08-23 16:48
文章分类

全部博文(90)

文章存档

2015年(1)

2011年(21)

2010年(59)

2009年(9)

我的朋友

分类: C/C++

2010-07-14 09:49:34

前面说要转向属性页,突然想起好象还有一个比较有意思的东东没看,所以就先不转了,再往前走那么一小步吧
这次要看的是枚举
在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();
再编译,再试,出来了吧

阅读(1217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~