zoukankan      html  css  js  c++  java
  • 动态创建自绘的CListBox注意事项

    Create(WS_VISIBLE|WS_CHILD|LBS_NOTIFY|LBS_OWNERDRAWFIXED|LBS_HASSTRINGS|LBS_NOINTEGRALHEIGHT ,rcWnd,this,xxx);

    如果想要响应ON_LBN_SELCHANGE消息,则一定要加LBS_NOTIFY;

    如果想要自绘风格则加LBS_OWNERDRAWFIXED;

    如果碰到DrawItem的时候,GetText获取不到正常的字符串的时候,则要加LBS_HASSTRINGS;

    如果碰到改变列表框大小的时候,列表框高度不对劲,则要加LBS_NOINTEGRALHEIGHT;

    顺便贴出自绘代码段:

    void CMyListBox::DrawItem(LPDRAWITEMSTRUCT lpDIS) 
    {
    	if ((int)lpDIS->itemID < 0)
    		return; 
    
    	TCHAR ch[64] = {0};
    	GetText(lpDIS->itemID, ch);
    
    	CDC* pDC = CDC::FromHandle(lpDIS->hDC);
    	CRect	rFrame	= lpDIS->rcItem;
    	rFrame.DeflateRect(1,1,1,1);
    
    	// If item has been selected, draw the highlight rectangle using the item's color.
    	CBrush brush(RGB(255,255,255));
    	pDC->FillRect(&rFrame, &brush);
    
    	if ((lpDIS->itemState & ODS_SELECTED))
    	{
    		CBrush brush(RGB(51,153,255));
    		pDC->FillRect(&rFrame, &brush);
    		pDC->SetTextColor(RGB(20,0,0)); 
    	}
    
    	int nBkMode = pDC->SetBkMode(TRANSPARENT);
    	UINT nFormat = DT_LEFT | DT_SINGLELINE | DT_VCENTER;
    	if (GetStyle() & LBS_USETABSTOPS)
    		nFormat |= DT_EXPANDTABS;
    	CFont font;
    	font.CreatePointFont(120, _T("宋体"));
    	pDC->SelectObject(&font);
    	// Calculate the rectangle size before drawing the text.
    	pDC->DrawText(ch,-1, &rFrame, nFormat);
    	pDC->SetBkMode(nBkMode);
    
    	DeleteObject(&font);
    }	
    

      

  • 相关阅读:
    Win32程序支持命令行参数的做法
    打包jar类库与使用jar类库
    Java日期格式化
    集合类层次结构关系
    深入理解Arrays.sort()
    Java 异常类层次结构
    equals()与hashCode()方法协作约定
    shp数据和tab数据的两点区别
    java+上传文件夹
    vue+大文件分片上传
  • 原文地址:https://www.cnblogs.com/bigfi/p/7122929.html
Copyright © 2011-2022 走看看