您的位置:程序门 -> c/c++ -> 新手乐园



跪求能够在gridctrl中的某一列中实现如何功能的方法


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


跪求能够在gridctrl中的某一列中实现如何功能的方法
发表于:2007-09-03 16:37:31 楼主
2007-09-03   16:30
比如能够在某一列中实现上面的日期输入格式

我知道在delphi中直接指定mask属性就可以了
在edit控件中也只要按照下面的方法也可以实现,
现在就难在想在gridctrl控件的某一列中实现该功能
主要是用户在输入日期的时候,能够方便一点,请各路高手帮忙,困扰了很久了
void   cmyedit::onchar(uint   nchar,   uint   nrepcnt,   uint   nflags)  
{
//   todo:   add   your   message   handler   code   here   and/or   call  
int   oldpos=loword(getsel());
cstring   str;
getwindowtext(str);

if   (   nchar> = '0 '   &&   nchar <= '9 '   )
{
if   (   oldpos <4   ¦ ¦   (   oldpos> 4   &&   oldpos <7)   ¦ ¦   (oldpos> 7   &&   oldpos <0xa)   ¦ ¦   (oldpos> 0xa   &&   oldpos <0xd   ) ¦ ¦   oldpos> 0xd)
{
str.delete(oldpos,1);
setwindowtext(str);
setsel(formatpos(oldpos,oldpos));
cedit::onchar(nchar,   nrepcnt,   nflags);
if   (   loword(getsel())==4   ¦ ¦   loword(getsel())==7   ¦ ¦loword(getsel())==0xa   ¦ ¦loword(getsel())==0xd)
{
oldpos=loword(getsel());
setsel(formatpos(oldpos+1,oldpos+1));
}
}
else
if   (   oldpos==4   ¦ ¦   oldpos==7   ¦ ¦   oldpos==0xa   ¦ ¦   oldpos==0xd   )
{
oldpos+=1;
setsel(formatpos(oldpos,oldpos));
str.delete(oldpos,1);
setwindowtext(str);
setsel(formatpos(oldpos,oldpos));
cedit::onchar(nchar,   nrepcnt,   nflags);
}
}
else
if   (   nchar==vk_back   )
{
if   (   (oldpos> 0   &&   oldpos <5)   ¦ ¦   (   oldpos> 5   &&   oldpos <8)   ¦ ¦   oldpos> 8)
{
str.insert(oldpos, '   ');
setwindowtext(str);
setsel(formatpos(oldpos,oldpos));
cedit::onchar(nchar,   nrepcnt,   nflags);
}
else
if   (   oldpos==5   ¦ ¦   oldpos==8   )
{
setsel(formatpos(oldpos-1,oldpos-1));
}
}

}
发表于:2007-09-03 17:14:571楼 得分:0
那个高手来解答一下啊
发表于:2007-09-04 09:33:332楼 得分:0
对所有的单元都响应编辑消息,然后获取当前编辑的单元,计算出当前列(有直接的方法),然后你知道怎么做了吧.
发表于:2007-09-04 09:46:143楼 得分:0
up
发表于:2007-09-07 11:19:404楼 得分:0
这些东西不用自己写的,自己去www.codeproject。com上面去多看看


快速检索

最新资讯
热门点击