问一个弱弱的问题
小弟刚刚c# 转c++
在网上找到一个在VC++6.0下构建可直接编辑的列表控件类的实例
二、实现方法
以在列表控件中实现CEditBox的直接编辑为例,介绍构建可直接编辑的列表控件类CEditListCtrl的方法:
在CEditListCtrl类中设置一个指向编辑框控件的指针m_edit,当列表控件中的一个子项目被两次不连续的单击后,使用m_edit在该子项目处创建一个编辑框,编辑框的大小与子项目的大小一致。当向编辑框中输入数据后,单击列表控件,便可将编辑框中的数据写回对应的子项目,同时释放m_edit所占用的空间。
当列表控件中的项目通过滚动条滚动时,某一子项目恰好处于编辑状态,则此时该子项目所对应的编辑框也要跟着滚动。为此,在CEditListCtrl类中添加WM_HSCROLL和 WM_VSCROLL消息处理函数,实现编辑框控件和其所对应的子项目的同步滚动。
在使用列表控件显示数据时,往往只需要编辑部分列中的数据,有些列的数据则不需要进行编辑。为此,在CEditListCtrl类中添加一个数据成员BOOL *m_isedit,m_isedit是一个数组,用于标志某一列是否可以进行直接编辑,若m_isedit[i]为TRUE,则第i列可以进行直接编辑,否则,反之。CEditListCtrl类中新增的成员函数SetEditColomn用于设置m_isedit的值。
以上方法也可用于在列表控件中实现ComboBox、DropdownList、CheckBox、PushButton等的直接编辑。
三、CEditListCtrl类的定义和实现
在VC++6.0中创建一个基于对话框的工程,点击菜单“插入->类”,在弹出的对话框中设置基类为CLlistCtrl,派生类为CEditListCtrl。在CEditListCtrl类中定义四个数据成员:
CEdit * m_edit;//指向编辑框,初值为NULL
BOOL * m_isedit;//允许进行编辑的列,初值为NULL
int m_item;//当前编辑的行号,初值为-1
int m_subitem;//当前编辑的列号,初值为-1
定义一个常量ID_LISTEDIT作为m_edit所指向的编辑框的ID号。在CEditListCtrl中添加NM_CLICK的消息处理函数,实现代码如下:
void CEditListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
if(!m_isedit) return;
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(!m_edit)
{
m_subitem=pNMListView->iSubItem;
if(pNMListView->iItem!=m_item)
{
m_item=pNMListView->iItem;//标志被单击的项目
return;
}
}
if(!m_isedit[m_subitem])//若当前列不允许直接编辑,则返回
return;
RECT m_itemrect,m_r;
GetItemRect(m_item ,&m_itemrect,2);
GetItemRect(0 ,&m_r,2);
int m_height=m_itemrect.bottom -m_itemrect.top ;
int x=m_r.left ,y=m_r.top,cx,cy;//(x,y,cx,cy)为编辑框显示的位置
for(int i=0;i< m_item;i++)
y+=m_height;
cy=y+m_height;
for(i=0;i<m_subitem;i++)
x+=GetColumnWidth(i);
cx=x+GetColumnWidth(i);
if(m_edit)//若编辑框已存在。
{
CString s1;
s1.Format ("%d %d %d %d",x,y,cx,cy);
m_edit->MoveWindow(x,y,cx-x,cy-y);//移动到当前子项目的位置。
Invalidate();//刷新屏幕。
return;
}
//若编辑框不存在,则创建编辑框,并在当前子项目处显示编辑框。
CRect rect(x,y,cx,cy);
m_edit=new CEdit();
m_edit->Create (WS_CHILD|WS_VISIBLE|WS_BORDER,rect,this,ID_LISTEDIT);
CString str=GetItemText (pNMListView->iItem,pNMListView->iSubItem);
m_edit->UpdateData(0);
m_edit->SetWindowText(str);
DWORD dwSel = m_edit->GetSel();
m_edit->SetSel(HIWORD(dwSel), -1);
m_edit->ShowWindow (SW_SHOW);//显示编辑框。
m_edit->SetFocus ();
*pResult = 0;
}
我就是想问一下,怎么定义那个常量?在哪里定义,在什么地方定义,先谢谢了。
在网上找到一个在VC++6.0下构建可直接编辑的列表控件类的实例
二、实现方法
以在列表控件中实现CEditBox的直接编辑为例,介绍构建可直接编辑的列表控件类CEditListCtrl的方法:
在CEditListCtrl类中设置一个指向编辑框控件的指针m_edit,当列表控件中的一个子项目被两次不连续的单击后,使用m_edit在该子项目处创建一个编辑框,编辑框的大小与子项目的大小一致。当向编辑框中输入数据后,单击列表控件,便可将编辑框中的数据写回对应的子项目,同时释放m_edit所占用的空间。
当列表控件中的项目通过滚动条滚动时,某一子项目恰好处于编辑状态,则此时该子项目所对应的编辑框也要跟着滚动。为此,在CEditListCtrl类中添加WM_HSCROLL和 WM_VSCROLL消息处理函数,实现编辑框控件和其所对应的子项目的同步滚动。
在使用列表控件显示数据时,往往只需要编辑部分列中的数据,有些列的数据则不需要进行编辑。为此,在CEditListCtrl类中添加一个数据成员BOOL *m_isedit,m_isedit是一个数组,用于标志某一列是否可以进行直接编辑,若m_isedit[i]为TRUE,则第i列可以进行直接编辑,否则,反之。CEditListCtrl类中新增的成员函数SetEditColomn用于设置m_isedit的值。
以上方法也可用于在列表控件中实现ComboBox、DropdownList、CheckBox、PushButton等的直接编辑。
三、CEditListCtrl类的定义和实现
在VC++6.0中创建一个基于对话框的工程,点击菜单“插入->类”,在弹出的对话框中设置基类为CLlistCtrl,派生类为CEditListCtrl。在CEditListCtrl类中定义四个数据成员:
CEdit * m_edit;//指向编辑框,初值为NULL
BOOL * m_isedit;//允许进行编辑的列,初值为NULL
int m_item;//当前编辑的行号,初值为-1
int m_subitem;//当前编辑的列号,初值为-1
定义一个常量ID_LISTEDIT作为m_edit所指向的编辑框的ID号。在CEditListCtrl中添加NM_CLICK的消息处理函数,实现代码如下:
void CEditListCtrl::OnClick(NMHDR* pNMHDR, LRESULT* pResult)
{
if(!m_isedit) return;
NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
if(!m_edit)
{
m_subitem=pNMListView->iSubItem;
if(pNMListView->iItem!=m_item)
{
m_item=pNMListView->iItem;//标志被单击的项目
return;
}
}
if(!m_isedit[m_subitem])//若当前列不允许直接编辑,则返回
return;
RECT m_itemrect,m_r;
GetItemRect(m_item ,&m_itemrect,2);
GetItemRect(0 ,&m_r,2);
int m_height=m_itemrect.bottom -m_itemrect.top ;
int x=m_r.left ,y=m_r.top,cx,cy;//(x,y,cx,cy)为编辑框显示的位置
for(int i=0;i< m_item;i++)
y+=m_height;
cy=y+m_height;
for(i=0;i<m_subitem;i++)
x+=GetColumnWidth(i);
cx=x+GetColumnWidth(i);
if(m_edit)//若编辑框已存在。
{
CString s1;
s1.Format ("%d %d %d %d",x,y,cx,cy);
m_edit->MoveWindow(x,y,cx-x,cy-y);//移动到当前子项目的位置。
Invalidate();//刷新屏幕。
return;
}
//若编辑框不存在,则创建编辑框,并在当前子项目处显示编辑框。
CRect rect(x,y,cx,cy);
m_edit=new CEdit();
m_edit->Create (WS_CHILD|WS_VISIBLE|WS_BORDER,rect,this,ID_LISTEDIT);
CString str=GetItemText (pNMListView->iItem,pNMListView->iSubItem);
m_edit->UpdateData(0);
m_edit->SetWindowText(str);
DWORD dwSel = m_edit->GetSel();
m_edit->SetSel(HIWORD(dwSel), -1);
m_edit->ShowWindow (SW_SHOW);//显示编辑框。
m_edit->SetFocus ();
*pResult = 0;
}
我就是想问一下,怎么定义那个常量?在哪里定义,在什么地方定义,先谢谢了。
...全文
相关推荐
jsp弱弱的计算器哈
很Easy咯,实现了本页显示结果,但是对新手看来还好啦
MBFontAdapter:可能并没有什么卵用的一个库
MBFontAdapter 可能并没有什么卵用的一个库 首先,为什么会有MBFontAdapter这么奇葩的一个库?原因很简单,当某天UI萌妹子弱弱地问你:“我们的app可不可以实现文字的字号在iPhone6上和iPhone6Plus上比iPhone4s和iPhone5大一些?如果要实现难度是不是比较大?工作量会不会增加很多?”乍一听还真有点头大。然而,这个时候你能回答不可以么?能回答很难么?能回答工作量会增加很多么?显然不能!!!于是MBFontAdapter就诞生了。功能很简单。因为常用的有文字的控件就那么几个:UIButton,UILabel,UITextField,UITextView。所以程序猿MmoaaY采用了非常猥琐的方式来满足UI萌妹子的私欲。如果有类似经历的程序猿,这个库或许能给你提供一些灵感和帮助。当然,也许这并没有什么卵用(因为貌似大部分app都不这么干……) tip
12122反反复复柔柔弱弱
12122反反复复柔柔弱弱
newpages.zip_J9F_东莞_柔柔弱弱若若
自己看看规划规划和法国恢复等多个广东东莞大哥大哥大哥大哥
Banach空间微分方程初值问题弱解的一个存在性定理 (1996年)
在弱耗散型条件下给出了Banach空间常微分方程初值问题弱解的一个存在性定理:定理设E是弱序列完备的实Banach空间,f(t,x)在R0上是弱弱一致连续的,对任意(t,x)∈R0,‖f(t,x)‖≤M,并且在R0上满足弱耗散型条件(*),则初值问题在[x0,t0,+α]上具有唯一的弱解,这里


