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