球星兑换是求一个月华贝的兑换码一更新吗

BOOL&& CMyListCtrl::OnNotify(WPARAM&& wParam,&& LPARAM&& lParam,&& LRESULT*&& pResult)&&&&
& HD_NOTIFY&& *pHDNotify&& =&& (HD_NOTIFY*)lP&&
&&&&&&&&&&&&&&&&&&& if(&& pHDNotify-&iItem&& ==&& 需要限制大小的列&& )&&
&&&&&&&&&&&&&&&&& {&&
& switch(&& pHDNotify-&hdr.code&& )&&
& //&& How&& to&& force&& a&& minimum&& column&& width&& Cees&& Mechielsen.&&
& case&& HDN_ITEMCHANGINGA:&&
& case&& HDN_ITEMCHANGINGW:&&
& case&& HDN_ENDTRACK:&&
& if(&& pHDNotify-&pitem-&mask&& &&& HDI_WIDTH&& &&&&
& pHDNotify-&pitem-&cxy&& &&& m_nMinSize&& &&&&
& pHDNotify-&pitem-&cxy&& &=&& 0&& )&&
& pHDNotify-&pitem-&cxy&& =&& m_nMinS //&& Set&& the&& column&& width&&
& //&& Prevent&& CListCtrl&& column&& resizing&&
&&&&&&&&&&&&&&&&&&& case&& HDN_DIVIDERDBLCLICKA:&&
& case&& HDN_DIVIDERDBLCLICKW:&&
& case&& HDN_BEGINTRACKW:&&
& case&& HDN_BEGINTRACKA:&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *pResult&& =&& TRUE;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //&& disable&& tracking&&
& return&& TRUE;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&
&&&&&&&&&&&&&&&&&&& }&&
& return&& CListCtrl::OnNotify(wParam,&& lParam,&& pResult);&&
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:232008次
积分:2902
积分:2902
排名:第11023名
原创:50篇
转载:95篇
评论:23条
(1)(1)(1)(2)(2)(1)(2)(1)(1)(1)(2)(1)(5)(12)(1)(8)(8)(3)(7)(11)(9)(2)(17)(3)(1)(3)(2)(1)(6)(8)(2)(16)(5)本帖子已过去太久远了,不再提供回复功能。1769人阅读
Remark:Clistctrl 改用CustomDraw机制,ListCtrl的样式就不能用Owner&Draw&Fixed;如果用了Owner&Draw&Fixed,就必须继承DrawItem成员寒暑,并且不能调用基类的DrawItem成员,因为:
void&CListCtrl::DrawItem(LPDRAWITEMSTRUCT)
ASSERT(FALSE);
用了CustomDraw,应该在ListCtrl控件的父类,也就是Dialog中响应OnCustomDraw(),而不是再CListCtrl的继承类中响应。客户定制绘图(Custom&Draw)和自绘(Owner&Draw)是不同的概念。
自动调整列宽1
自动调整CListCtrl 列宽
void CPrintsysDlg::AdjustColumnWidth()
//SetRedraw(FALSE);
int nColumnCount = GetColumnCount();
for (int i = 0; i & nColumnC i++)
m_list.SetColumnWidth(i, LVSCW_AUTOSIZE);
int nColumnWidth =m_list. GetColumnWidth(i);
m_list.SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
int nHeaderWidth = m_list.GetColumnWidth(i);
m_list.SetColumnWidth(i, max(nColumnWidth, nHeaderWidth));
// SetRedraw(TRUE);
int CPrintsysDlg::GetColumnCount()
CHeaderCtrl* pHeaderCtrl =m_list. GetHeaderCtrl();
return (pHeaderCtrl-&GetItemCount());
自动调整列宽2
void CListCtrlEx::AutoSizeColumns(int col /*=-1*/,BOOL bFitWidth/*=FALSE*/)
// Call this after your list control is filled
CHeaderCtrl* pHeaderCtrl = GetHeaderCtrl();
int ColumnCount =
pHeaderCtrl-&GetItemCount();
if(!GetHeaderCtrl())
ShowWindow(SW_HIDE);//避免闪烁
SetRedraw(FALSE);
if(!bFitWidth)//如果不自动调整最后一列宽度,使得总列宽等于控件宽度,
InsertColumn(ColumnCount,&&);
int mincol = col & 0 ? 0 :
int maxcol = col & 0 ? ColumnCount-1 :
for (col = col &= col++) {
SetColumnWidth(col,LVSCW_AUTOSIZE);
int wc1 = GetColumnWidth(col);
SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);
int wc2 = GetColumnWidth(col);
int iFrom=GetTopIndex();
int nCountPerpage=GetCountPerPage();
if(nCountPerpage&=0)
nCountPerpage=GetItemCount();
int iTo=iFrom+nCountP
int nImgWidth=0;
int iIndent=0;
li.mask=LVIF_IMAGE|LVIF_INDENT;
IMAGEINFO ImageI
for(int iItem=iFiItem&iTo;iItem++){
li.iItem=iI
GetItem(&li);
iIndent=max(li.iIndent,iIndent);
if(li.iImage!=-1){
CImageList* pImageList=GetImageList(LVSIL_SMALL);
if(pImageList-&GetSafeHandle()){
pImageList-&GetImageInfo(li.iImage,&ImageInfo);
nImgWidth=max(nImgWidth,ImageInfo.rcImage.right-ImageInfo.rcImage.left);
int wc = max(20,max(wc1,wc2));
if(col==0)
wc+=nImgWidth*(iIndent+1);
SetColumnWidth(col,wc);
if(!bFitWidth)
DeleteColumn(ColumnCount-1);
SetRedraw(TRUE);
ShowWindow(SW_SHOW);
禁止列宽拖动
通过重写虚函数OnNotify实现。
类视图加入OnNotify:
//头文件中
virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
//函数定义
//禁止List控件列与列之间的拖拉
BOOL CListCtrlEx::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult)
(HD_NOTIFY*)lP
switch(((NMHDR*)lParam)-&code)
case HDN_BEGINTRACKW://拖动
case HDN_BEGINTRACKA:
case HDN_DIVIDERDBLCLICK://双击
(pHDN-&iItem
// Col—设定为自己不想改变的列值,比如Col=0,就是第1列
*pResult = TRUE;
return TRUE;
return CListCtrl::OnNotify(wParam, lParam, pResult);
固定标题列宽,禁止拖动(Ini ListCtril中调用):
CHeaderCtrl* pHeaderCtrl = (CHeaderCtrl*)m_ListCtrl.GetHeaderCtrl(); &&
pHeaderCtrl-&EnableWindow( FALSE ) ;
禁止点击列(Ini ListCtril中调用):
BOOL CListCtrlEx::PreTranslateMessage(MSG* pMsg)
&if(pMsg-&message==WM_LBUTTONDOWN || pMsg-&message==WM_LBUTTONUP)
&&CHeaderCtrl* pH
&&pHead=GetHeaderCtrl();
&&if(pMsg-&hwnd==pHead-&m_hWnd){
&&&//return TRUE;&& //无法点击列
&return CListCtrl::PreTranslateMessage(pMsg);
把ListCtrl最后一列自动调整大小;并随对话框改变而改变&&
建立工程AutoListCtrl
给 CAutolistCtlDlg添加如下几个函数,在OnInitDialog()中调用SetList();
&void SetList();
&void SetListColumn();
&void SetListText();
&void ReSizeList();
void CAutolistCtlDlg::SetList()
&SetListColumn();
&SetListText();
&ReSizeList();
void CAutolistCtlDlg::SetListColumn()//列表头
&CString strC
&for (int i = 0; i & 3; i++)
&&strColumn.Format(_T(&Column(%d)&), i);
&&m_xList.InsertColumn(i, strColumn,LVCFMT_LEFT, 100);
void CAutolistCtlDlg::SetListText()
&CString strListT
&for (int i = 0; i & 3; i++)
&&for (int j = 0; j & 10; j++)
&&&strListText.Format(_T(&Item[%d][%d]&), j, i);
&&&if (0 == i)
&&&&m_xList.InsertItem(j, strListText);//第一列
&&&&m_xList.SetItemText(j, i, strListText);//后面几列
void CAutolistCtlDlg::ReSizeList()
&GetClientRect(&rect);//wnd的
&m_xList.MoveWindow(5, 5, rect.Width() - 10, rect.Height() - 10);
void CAutolistCtlDlg::OnSize(UINT nType, int cx, int cy)//对话框对应消息ON_WM_SIZE的函数
&CDialog::OnSize(nType, cx, cy);
&if (IsWindow(m_xList.m_hWnd))//会在InitDialog之前执行一次,这个时候listctrl还没被创建
&&m_xList.MoveWindow(5, 5, cx - 1, cy -10);
&&//m_xList.AutoColumn();
/*Onsize中的代码使ListCtrl随对话框的缩放而缩放,要使对话框有缩放功能,必须在对话框的Border属性中选择Resizing*/
接下来要让listcrl的最后一列自动对齐(填满)
新建一个MFC类继承于CListCtrl
class CAutoColumnList : public CListCtrl
添加成员函数
&void AutoColumn();
&void OnSize(UINT nType, int cx, int cy);//List的ON_WM_SIZE()对应的消息函数
BEGIN_MESSAGE_MAP(CAutoColumnList, CListCtrl)
&ON_WM_SIZE()
END_MESSAGE_MAP()
/*1.ON_WM_SIZE()是MFC自带消息,其消息函数一定对应void OnSize(UINT nType, int cx, int cy)形式。
但我们仍然要自己把OnSize声明一下
2.如果是自定义消息,则要这么写:
BEGIN_MESSAGE_MAP(CMyListCtrl, CListCtrl)
&ON_WM_SIZE()
&& ON_MESSAGE(WM_RESIZEME,OnResizeMe)
END_MESSAGE_MAP()*/
void CAutoColumnList::OnSize(UINT nType, int cx, int cy)
&CListCtrl::OnSize(nType, cx, cy);
&AutoColumn();
// CAutoColumnList message handlers
void CAutoColumnList::AutoColumn()//自动调节最后一列
int nLastColumnWidth = 0;
int nColumnNum = 0;
GetClientRect(&xRect);//OleControl的
nLastColumnWidth = xRect.Width();
nColumnNum = GetHeaderCtrl()-&GetItemCount();
for (int i = 0; i & nColumnNum - 1; i++)
nLastColumnWidth = nLastColumnWidth - GetColumnWidth(i);
SetColumnWidth(nColumnNum - 1, nLastColumnWidth);
最后,要记得把ListCtrl的变量m_xList类型改为CAutoColumnList
到此为止,程序可以运行了,但我们会问,为什么要为ListCtl设置一个消息函数OnSize,而不直接在Dlg的OnSize里面调用m_xList.AutoColumn()呢?
下面来看一下CAutolistCtlDlg::OnSize,& CAutolistCtlDlg::OnInitDialog(),
CAutoColumnList::OnSize这三个函数在程序刚启动时的调用顺序:
1.首先调用CAutolistCtlDlg::OnSize
&知道为什么要:
if (IsWindow(m_xList.m_hWnd))//会在InitDialog之前执行一次,这个时候listctrl还没被创建
&&m_xList.MoveWindow(5, 5, cx - 1, cy -10);
&&//m_xList.AutoColumn();
判断一下了吧?这个时候listctrl还没生成,使用它当然会出错。当然,有了此条件语句,在其内部的
m_xList.AutoColumn()想执行也执行不了了。
2.再调用CAutolistCtlDlg::OnInitDialog(),这个时候SetList()被调用了。
3.最后调用CAutoColumnList::OnSize,因为listCtrl已经建立,调用AutoColumn()自然可以成功调整列。
所以如果把AutoColumn()放在CAutolistCtlDlg::OnSize中而不是CAutoColumnList::OnSize中,刚启动程
序时是不会对齐的,直到resize一下dlg,再次执行CAutolistCtlDlg::OnSize,则条件语句中的东西才能被执行。
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:70418次
排名:千里之外
原创:16篇
转载:85篇
(1)(1)(1)(1)(1)(1)(1)(3)(1)(1)(2)(2)(7)(2)(4)(1)(3)(3)(1)(5)(7)(5)(26)(11)(7)(4)1851人阅读
VC/MFC(12)
1.动态生成列表控件。
在资源页面里,点击列表控件,然后在需要放置列表的地方拖拉就可以生成一个列表,查看它的属性-&样式,可以设置它的样式,例如图标,小图标,列表,报告,单个选择,自动排列,没有标签换行,编辑标签 等等。
这种方法是静态生成列表控件,程序运行时列表就已经生成了,如果我们需要动态生成列表控件,让列表在我需要他生成的时候才生成,就要用CListCtrl::Create函数。
BOOL&Create(&DWORD&dwStyle,&const&RECT&&rect,&CWnd*&pParentWnd,&UINT&nID&);
其中参数dwStyle用来确定列表控制的风格;rect用来确定列表控制的大小和位置;pParentWnd用来确定列表控制的父窗口,通常是一个对话框;nID用来确定列表控制的标识。其中列表控制的风格可以是下列值的组合:
&&&&&& LVS_ALIGNLEFT 用来确定表项的大小图标以左对齐方式显示;&
  LVS_ALIGNTOP 用来确定表项的大小图标以顶对齐方式显示;&
  LVS_AUTOARRANGE 用来确定表项的大小图标以自动排列方式显示;&
  LVS_EDITLABELS 设置表项文本可以编辑,父窗口必须设有LVN_ENDLABELEDIT风格;&
  LVS_ICON 用来确定大图标的显示方式;&
  LVS_LIST 用来确定列表方式显示;&
  LVS_NOCOLUMNHEADER 用来确定在详细资料方式时不显示列表头;&
  LVS_NOLABELWRAP 用来确定以单行方式显示图标的文本项;&
  LVS_NOSCROLL 用来屏蔽滚动条;&
  LVS_NOSORTHEADER 用来确定列表头不能用作按钮功能;&
  LVS_OWNERDRAWFIXED 在详细列表方式时允许自绘窗口;&
  LVS_REPORT 用来确定以详细资料即报告方式显示;&
  LVS_SHAREIMAGELISTS用来确定共享图像列表方式;&
  LVS_SHOWSELALWAYS 用来确定一直显示被选中表项方式;&
  LVS_SINGLESEL 用来确定在某一时刻只能有一项被选中;&
  LVS_SMALLICON 用来确定小图标显示方式;&
  LVS_SORTASCENDING 用来确定表项排序时是基于表项文本的升序方式;&
  LVS_SORTDESCENDING 用来确定表项排序时是基于表项文本的降序方式;
以上的风格其实就是静态生成列表控件时 “属性-&样式” 标签里的内容。如果列表控件创建完之后我们需要修改他的样式,就可以用GetWindowLong来获取CListCtrl已有的样式,然后用SetWindowLong来修改样式。
2.设置扩展样式。
&& 除了上面的哪些基本样式,CListctrl还有更多的扩展样式,如果我们要添加或删除扩展样式,就不是像基本样式那样用SetWindowLong了,CListctrl提供了一个函数CListCtrl::SetExtendedStyle,这个函数可以添加或删除扩展样式,相应的要获得CListctrl的扩展样式,应该使用CListCtrl::GetExtendedStyle,而不是GetWindowLong。
DWORD SetExtendedStyle( DWORD&dwNewStyle&);
DWORD&dwNewStyle&就是你要设置的样式咯,可以是以下值的组合(抄别人的不知道完不完整):
CListCtrl控件的扩展样式
LVS_EX_GRIDLINES //绘制表格线
LVS_EX_SUBITEMIMAGES//子项目图标列表
LVS_EX_CHECKBOXES //带复选框
LVS_EX_TRACKSELECT //自动换行
LVS_EX_HEADERDRAGDROP//报表头可以拖拽
LVS_EX_FULLROWSELECT //选择整行
LVS_EX_ONECLICKACTIVATE//单击激活
LVS_EX_TWOCLICKACTIVATE//双击激活
LVS_EX_FLATSB//扁平滚动条
LVS_EX_REGIONAL
LVS_EX_INFOTIP
LVS_EX_UNDERLINEHOT
LVS_EX_UNDERLINECOLD
LVS_EX_MULTIWORKAREAS//多工作区
列表控件创建好之后,就要为他添加列了,使用CListCtrl::InsertColumn函数为它添加列。要删除一列,使用CListCtrl::DeleteColumn函数。
int InsertColumn( int&nCol,
LPCTSTR&lpszColumnHeading,
int&nFormat&=
LVCFMT_LEFT, int&nWidth&=
-1, intnSubItem&=
iCol:为列的位置,从零开始&
lpszColumnHeading:为显示的列名&
nFormat:为显示对齐方式&
nWidth:为显示宽度&
nSubItem:为分配给该列的列索引。这个参数有什么作用至今不懂,希望懂的朋友告诉我。
InsertColumn(3,&所在区域&,LVCFMT_LEFT,60);
即添加一个名字为“所在区域”的列,名字靠左排列,列的长度为60,这个列是第四列(从0开始算)。
与 删除行。
添加行即是添加记录咯,一行就是一条记录。使用CListCtrl::InsertItem函数来添加行。要删除一行,使用CListCtrl::DeleteItem函数,注意,如果你删除的行不是最后一行,那么删除后下面的行会自动上移填补删除行的空间。要删除全部行,使用CListCtrl::DeleteAllItems。
int InsertItem( int&nItem,
LPCTSTR&lpszItem&);
nItem& :行的索引,从0开始计算。
lpszItem&&:行的名称,一般为0或者&&(即不需要为行添加名称)。如果为他赋值一个字符串,实际效果是该字符串&会成为该行的第一列的内容。
例如&InsertItem( 5, 0)&即在行索引5的位置添加一行(即是第六行)。
5.设置某行某列的内容
与 获取某行某列的内容。
如果要设置某行某列的内容。使用CListCtrl::SetItemText函数。
BOOL&SetItemText(&int&nItem,&int&nSubItem,&LPTSTR&lpszText&);
nItem&&&&&&& :行的索引,从0开始。
nSubItem&&:列的索引,从0开始。
lpszText&&& :要填充的内容。
例如& SetItemText(6,3,&hello&);& 即设置第7行,第4列的内容为“hello”。
相反地,如果我们要提取某行某列的内容,使用CListCtrl::GetItemText函数。
CString GetItemText( int&nItem,
int&nSubItem&)
nItem&&&&&&& :行的索引,从0开始。
nSubItem&&:列的索引,从0开始。
例如 CS&&& text=GetItemText(6,3);&&& 提取第7行,第4列的内容并赋给text。
6.获取一列的属性和设置一列的属性。
如果要获取某列的属性,譬如说某列的列名、列的长度。就要用CListCtrl::GetColumn函数。
BOOL&GetColumn(&int&nCol,&LVCOLUMN*&pColumn&)
&nCol&&&&&&&&&&&&&&& :列的索引,从0开始。
&pColumn&&&&&&&& :指向LVCOLUMN结构体的指针。该LVCOLUMN结构体就是用来保存得到的列属性信息的。
LVCOLUMN结构体有一个成员变量&mask&,你必须为这个变量赋值,用来指定你要获取什么属性,譬如说你要获取某列的长度,你就必须为mask赋值LVCF_WIDTH,如果你要获取某列的列名,就必须为mask赋值LVCF_TEXT。从MSDN中还有这样的描述:If
the&mask&member specifies the&LVCF_TEXT&value,
the&pszText&member must contain the address of the buffer that receives the
item text and the&cchTextMax&member must specify the size of the buffer.
意思是说如果你要获取的属性是列名,就必须为LVCOLUMN结构体的pszText变量指定一个buf的地址,这个buf用来接收列名,还要为LVCOLUMN结构体的cchTextMax变量指定这个buf的大小。
下面的例子表示要获取第3列的列名和列长度:
&&LVCOLUMN
&&lvc.mask=LVCF_WIDTH | LVCF_TEXT;
&&char name[20];
&&lvc.pszText=
&&lvc.cchTextMax=20;
&&m_listctrl.GetColumn(2,&lvc);
成功获取属性信息的话长度就保存在LVCOLUMN lvc的cx变量里,列名就保存在char name[20]里,当然你也可以从LVCOLUMN lvc的pszText变量里得到列名,因为pszText变量保存了char name[20]的首地址。
如果要设置某列的属性,就要用CListCtrl::SetColumn函数。
BOOL&SetColumn(&int&nCol,&const&LVCOLUMN*&pColumn&);
参数意思和GetColumn一样,而SetColumn里的pColumn&参数保存了你将要设置的属性。下面的例子表示把第四列的列长度设置为50,列名设置为“销量”:
lvc.mask=LVCF_WIDTH | LVCF_TEXT;&&&//同样的,你要设置什么属性,就要先给mask变量赋值响应的标志。
lvc.pszText=&销量&;
lvc.cx=50;
m_listctrl.SetColumn(3,&lvc);
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:54748次
排名:千里之外
转载:52篇
(2)(22)(1)(6)(5)(1)(1)(13)(4)(1)(4)(1)2082人阅读
&void CReportCtrl::AutoSizeColumns(){&&&&&& bool bFitWidth=
&ShowWindow(SW_HIDE);//避免闪烁 &SetRedraw(FALSE);
&//自动调整宽度&for(int k=0;k&GetColumnCount();k++)&{&&&// Call this after your list control is filled&&if(!GetHeaderCtrl())&&& &&if(!bFitWidth)//如果不自动调整最后一列宽度,使得总列宽等于控件宽度, &&&& InsertColumn(GetColumnCount(),&&);
&&int col=k;&&int mincol = col & 0 ? 0 : &&int maxcol = col & 0 ? GetColumnCount()-1 : &&&&for (col = col &= col++) &&{ &&&SetColumnWidth(col,LVSCW_AUTOSIZE); &&&int wc1 = GetColumnWidth(col); &&&SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);
&&&int wc2 = GetColumnWidth(col); &&&int iFrom=GetTopIndex(); &&&int nCountPerpage=GetCountPerPage();
&&&if(nCountPerpage&=0) &&&&nCountPerpage=GetItemCount();
&&&int iTo=iFrom+nCountP &&&int nImgWidth=0; &&&int iIndent=0; &&&LVITEM &&&li.mask=LVIF_IMAGE|LVIF_INDENT; &&&IMAGEINFO ImageI &&&for(int iItem=iFiItem&iTo;iItem++)&&&{ &&&&li.iItem=iI &&&&GetItem(&li); &&&&iIndent=max(li.iIndent,iIndent); &&&&if(li.iImage!=-1)&&&&{ &&&&&CImageList* pImageList=CListCtrl::GetImageList(LVSIL_SMALL); &&&&&if(pImageList-&GetSafeHandle())&&&&&{ &&&&&&pImageList-&GetImageInfo(li.iImage,&ImageInfo); &&&&&&nImgWidth=max(nImgWidth,ImageInfo.rcImage.right-ImageInfo.rcImage.left); &&&&&} &&&&} &&&} &&&int wc = max(20,max(wc1,wc2)); &&&if(col==0) &&&&wc+=nImgWidth*(iIndent+1); &&&else &&&&wc+=nImgW &&&SetColumnWidth(col,wc); &&}
&&if(!bFitWidth) &&&DeleteColumn(GetColumnCount()-1); &&&}&SetRedraw(TRUE); &ShowWindow(SW_SHOW); &
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:107884次
积分:1658
积分:1658
排名:千里之外
原创:53篇
转载:12篇
评论:22条
(1)(1)(1)(1)(1)(1)(2)(3)(16)(7)(4)(3)(8)(8)(2)(5)(1)

我要回帖

更多关于 传奇球星兑换卡 的文章

 

随机推荐