改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

Java开发的企业排班系统 Java开发的企业排班系统,用了springboot框架,人脸识别是采用百度接口的方式实现 阅读详情

转载自:

http://www.vckbase.com/index.php/wv/1550

 

一、 实现过程

1.表头修改

新建一个MFC类CHeaderCtrlCl,其基类为CHeaderCtrl,响应OnPaint消息实现自绘,实现代码请看源代码(由于代码较占篇幅,所以就不贴上来了,抱歉),在头文件中定义函数LRESULT OnLayout( WPARAM wParam, LPARAM lParam ),之后手动添加消息响应ON_MESSAGE(HDM_LAYOUT, OnLayout),在消息响应中改变高度,实现代码如下:

01.LRESULT CHeaderCtrlCl::OnLayout( WPARAM wParam, LPARAM lParam )

02.{

03.LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam);

04.HD_LAYOUT &hdl = *( HD_LAYOUT * ) lParam;

05.RECT *prc = hdl.prc;

06.WINDOWPOS *pwpos = hdl.pwpos;

07.int nHeight = (int)(pwpos->cy * m_Height); //改变高度,m_Height为倍数

08.pwpos->cy = nHeight;

09.prc->top = nHeight;

10.return lResult;

11.}

2. 表的修改

新建一个MFC类CListCtrlCl,其基类为CListCtrl,定义一个CHeaderCtrlCl的成员变量m_Header,重载PreSubclassWindow(),在函数中修改控件类型为自绘模式,然后子类化表头,代码如下:

1.void CListCtrlCl::PreSubclassWindow()

2.{

3.// TODO: 在此添加专用代码和/或调用基类

4.ModifyStyle(0,LVS_OWNERDRAWFIXED);

5.CListCtrl::PreSubclassWindow();

6.CHeaderCtrl *pHeader = GetHeaderCtrl();

7.m_Header.SubclassWindow(pHeader->GetSafeHwnd());

8.}

添加成员变量,保存一些基本信息。

1.CPtrList m_ptrListCol;  //保存列颜色

2.CPtrList m_ptrListItem; //保存Item颜色表

3.CPtrList m_colTextColor; //保存列字体颜色

4.CPtrList m_ItemTextColor; //保存单元格字体颜色

重载DrawItem()实现自绘,实现代码请参照代码。 手动添加消息宏ON_WM_MEASUREITEM_REFLECT(),添加下面的函数,实现修改行高。

1.void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)

2.{

3.if (m_nRowHeight>0)

4.{

5.lpMeasureItemStruct->itemHeight = m_nRowHeight;

6.}

7.}

添加消息处理OnMeasureItem()

1.void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)

2.{

3.// TODO: 在此添加消息处理程序代码和/或调用默认值

4.CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);

5.}

覆盖基类InsertColumn进行列信息保存

01.int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading,

02.int nFormat /* = LVCFMT_LEFT */,

03.int nWidth /* = -1 */,

04.int nSubItem /* = -1 */)

05.{

06.m_Header.m_HChar.Add(lpszColumnHeading);

07.if (nFormat==LVCFMT_LEFT)

08.{

09.m_Header.m_Format = m_Header.m_Format + "0";

10.}

11.else if (nFormat==LVCFMT_CENTER)

12.{

13.m_Header.m_Format = m_Header.m_Format + "1";

14.}

15.else if (nFormat==LVCFMT_RIGHT)

16.{

17.m_Header.m_Format = m_Header.m_Format + "2";

18.}

19.else

20.{

21.m_Header.m_Format = m_Header.m_Format + "1";

22.}

23.return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);

24.}

二、运行效果图如下:

三、使用方法

把HeaderCtrlCl.h, HeaderCtrlCl.cpp, ListCtrlCl.h, ListCtrlCl.cpp添加到你的工程中,在拖一个CListCtrl控件到对话框上,添加成员变量,然后在头文件中#include “ListCtrlCl.h”,把刚添加的成员变量类型改为 CListCtrlCl ,在对话框的OnInitDialog()中添加初始化代码:

view source

01.m_ListCtrl.SetColColor(0,RGB(10,150,20)); //设置列背景色

02.m_ListCtrl.SetColColor(2,RGB(30,100,90)); //设置列背景色

03.m_ListCtrl.SetBkColor(RGB(50,10,10));        //设置背景色

04.m_ListCtrl.SetItemColor(1,1,RGB(100,100,10)); //设置指定单元背景色

05.m_ListCtrl.SetRowHeigt(25);               //设置行高度

06.m_ListCtrl.SetHeaderHeight(1.5);          //设置头部高度

07.m_ListCtrl.SetHeaderFontHW(16,0);   //设置头部字体高度,和宽度,0表示缺省,自适应

08.m_ListCtrl.SetHeaderTextColor(RGB(255,200,100)); //设置头部字体颜色

09.m_ListCtrl.SetTextColor(RGB(0,255,255));  //设置文本颜色

10.m_ListCtrl.SetHeaderBKColor(100,255,100,8); //设置头部背景色

11.m_ListCtrl.SetFontHW(15,0);               //设置字体高度,和宽度,0表示缺省宽度

12.m_ListCtrl.SetColTextColor(2,RGB(255,255,100)); //设置列文本颜色

13.m_ListCtrl.SetItemTextColor(3,1,RGB(255,0,0));  //设置单元格字体颜色

 

 

 

ListCtrlCl.h的内容如下:

#pragma once
#include "HeaderCtrlCl.h"
// CListCtrlCl

class CListCtrlCl : public CListCtrl
{
 DECLARE_DYNAMIC(CListCtrlCl)

public:
 CHeaderCtrlCl m_Header;
 CListCtrlCl();
 virtual ~CListCtrlCl();

protected:
 DECLARE_MESSAGE_MAP()
 virtual void PreSubclassWindow();
public:
 virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
public:
 afx_msg void OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct);
 void MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct);
public:
 // 行高
 int m_nRowHeight;
 int InsertColumn(int nCol, LPCTSTR lpszColumnHeading,
  int nFormat = LVCFMT_LEFT, int nWidth = -1, int nSubItem = -1);
public:
 // Gradient - 渐变系数,立体背景用,不用渐变设为0
 void SetHeaderBKColor(int R, int G, int B, int Gradient);
public:
 // 设置表头高度
 void SetHeaderHeight(float Height);
 CPtrList m_ptrListCol;  //保存列颜色
 CPtrList m_ptrListItem; //保存Item颜色表
 CPtrList m_colTextColor; //保存列字体颜色
 CPtrList m_ItemTextColor; //保存单元格字体颜色
 bool FindColColor(int col ,COLORREF &color); //查找列颜色
 bool FindItemColor(int col,int row,COLORREF &color);
 bool FindColTextColor(int col,COLORREF &color); //查找列字体颜色
 bool FindItemTextColor(int col,int row,COLORREF &color);
 void SetColColor(int col,COLORREF color);  //设置列颜色
 void SetItemColor(int col,int row,COLORREF color); //设置Item颜色
 void SetColTextColor(int col,COLORREF color);   //设置列文本颜色
 void SetItemTextColor(int col,int row,COLORREF color);
 void SetRowHeigt(int nHeight); //设置行高
 void SetHeaderFontHW(int nHeight,int nWith); //设置表头字体大小
 void SetHeaderTextColor(COLORREF color);
 COLORREF m_color;
 BOOL SetTextColor(COLORREF cr);
 void SetFontHW(int nHeight,int nWith);  //设置字体的高和宽
public:
 // 字体高度
 int m_fontHeight;
public:
 // 字体宽度
 int m_fontWith;
};

 

ListCtrCl.cpp的内容如下:

// ListCtrlCl.cpp : 实现文件
//

#include "stdafx.h"
#include "DemoList.h"
#include "ListCtrlCl.h"

struct stColor
{
 int nRow;
 int nCol;
 COLORREF rgb;
};
// CListCtrlCl

IMPLEMENT_DYNAMIC(CListCtrlCl, CListCtrl)

CListCtrlCl::CListCtrlCl()
: m_nRowHeight(0)
, m_fontHeight(12)
, m_fontWith(0)
{
 m_color = RGB(0,0,0);
}

CListCtrlCl::~CListCtrlCl()
{
}


BEGIN_MESSAGE_MAP(CListCtrlCl, CListCtrl)
 ON_WM_MEASUREITEM()
 ON_WM_MEASUREITEM_REFLECT()
END_MESSAGE_MAP()

 

// CListCtrlCl 消息处理程序

 

void CListCtrlCl::PreSubclassWindow()
{
 // TODO: 在此添加专用代码和/或调用基类
 ModifyStyle(0,LVS_OWNERDRAWFIXED);
 CListCtrl::PreSubclassWindow();
 CHeaderCtrl *pHeader = GetHeaderCtrl();
 m_Header.SubclassWindow(pHeader->GetSafeHwnd());
}

void CListCtrlCl::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

 // TODO:  添加您的代码以绘制指定项
 TCHAR lpBuffer[256];

 LV_ITEM lvi;

 lvi.mask = LVIF_TEXT | LVIF_PARAM ;
 lvi.iItem = lpDrawItemStruct->itemID ;
 lvi.iSubItem = 0;
 lvi.pszText = lpBuffer ;
 lvi.cchTextMax = sizeof(lpBuffer);
 VERIFY(GetItem(&lvi));

 LV_COLUMN lvc, lvcprev ;
 ::ZeroMemory(&lvc, sizeof(lvc));
 ::ZeroMemory(&lvcprev, sizeof(lvcprev));
 lvc.mask = LVCF_WIDTH | LVCF_FMT;
 lvcprev.mask = LVCF_WIDTH | LVCF_FMT;

 CDC* pDC;
 pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
 CRect rtClient;
 GetClientRect(&rtClient);
 for ( int nCol=0; GetColumn(nCol, &lvc); nCol++)
 {
  if ( nCol > 0 )
  {
   // Get Previous Column Width in order to move the next display item
   GetColumn(nCol-1, &lvcprev) ;
   lpDrawItemStruct->rcItem.left += lvcprev.cx ;
   lpDrawItemStruct->rcItem.right += lpDrawItemStruct->rcItem.left;
  }

  CRect rcItem;  
  if (!GetSubItemRect(lpDrawItemStruct->itemID,nCol,LVIR_LABEL,rcItem))  
   continue;  

  ::ZeroMemory(&lvi, sizeof(lvi));
  lvi.iItem = lpDrawItemStruct->itemID;
  lvi.mask = LVIF_TEXT | LVIF_PARAM;
  lvi.iSubItem = nCol;
  lvi.pszText = lpBuffer;
  lvi.cchTextMax = sizeof(lpBuffer);
  VERIFY(GetItem(&lvi));
  CRect rcTemp;
  rcTemp = rcItem;

  if (nCol==0)
  {
   rcTemp.left -=2;
  }

  if ( lpDrawItemStruct->itemState & ODS_SELECTED )
  {
   pDC->FillSolidRect(&rcTemp, GetSysColor(COLOR_HIGHLIGHT)) ;
   pDC->SetTextColor(GetSysColor(COLOR_HIGHLIGHTTEXT)) ;
  }
  else
  {
   COLORREF color;
   color = GetBkColor();
   pDC->FillSolidRect(rcTemp,color);

   if (FindColColor(nCol,color))
   {
    pDC->FillSolidRect(rcTemp,color);
   }
   if (FindItemColor(nCol,lpDrawItemStruct->itemID,color))
   {
    pDC->FillSolidRect(rcTemp,color);
   }
   
   //pDC->SetTextColor(m_color);
  }

  pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT));

  UINT   uFormat    = DT_CENTER ;
  if (m_Header.m_Format[nCol]=='0')
  {
   uFormat = DT_LEFT;
  }
  else if (m_Header.m_Format[nCol]=='1')
  {
   uFormat = DT_CENTER;
  }
  else if (m_Header.m_Format[nCol]=='2')
  {
   uFormat = DT_RIGHT;
  }
  TEXTMETRIC metric;
  pDC->GetTextMetrics(&metric);
  int ofst;
  ofst = rcItem.Height() - metric.tmHeight;
  rcItem.OffsetRect(0,ofst/2);
  pDC->SetTextColor(m_color);
  COLORREF color;
  if (FindColTextColor(nCol,color))
  {
   pDC->SetTextColor(color);
  }
  if (FindItemTextColor(nCol,lpDrawItemStruct->itemID,color))
  {
   pDC->SetTextColor(color);
  }
  CFont nFont ,* nOldFont;
  nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("宋体"));//创建字体
  nOldFont = pDC->SelectObject(&nFont);
  DrawText(lpDrawItemStruct->hDC, lpBuffer, strlen(lpBuffer),
   &rcItem, uFormat) ;

  pDC->SelectStockObject(SYSTEM_FONT) ;
 }

}

void CListCtrlCl::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
 // TODO: 在此添加消息处理程序代码和/或调用默认值

 CListCtrl::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
void CListCtrlCl::MeasureItem(LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
 if (m_nRowHeight>0)
 {
  lpMeasureItemStruct->itemHeight = m_nRowHeight;
 }
}
int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, int nFormat /* = LVCFMT_LEFT */, int nWidth /* = -1 */, int nSubItem /* = -1 */)
{
 m_Header.m_HChar.Add(lpszColumnHeading);
 if (nFormat==LVCFMT_LEFT)
 {
  m_Header.m_Format = m_Header.m_Format + "0";
 }
 else if (nFormat==LVCFMT_CENTER)
 {
  m_Header.m_Format = m_Header.m_Format + "1";
 }
 else if (nFormat==LVCFMT_RIGHT)
 {
  m_Header.m_Format = m_Header.m_Format + "2";
 }
 else
 {
  m_Header.m_Format = m_Header.m_Format + "1";
 }
 return CListCtrl::InsertColumn(nCol,lpszColumnHeading,nFormat,nWidth,nSubItem);
}
// Gradient - 渐变系数,立体背景用,不用渐变设为0
void CListCtrlCl::SetHeaderBKColor(int R, int G, int B, int Gradient) //设置表头背景色
{
 m_Header.m_R = R;
 m_Header.m_G = G;
 m_Header.m_B = B;
 m_Header.m_Gradient = Gradient;
}

// 设置表头高度
void CListCtrlCl::SetHeaderHeight(float Height) //设置表头高度
{
 m_Header.m_Height = Height;
}
bool CListCtrlCl::FindColColor(int col,COLORREF &color) //查找列颜色
{
 int flag = 0;
 for (POSITION pos = m_ptrListCol.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_ptrListCol.GetNext(pos);
  if (pColor->nCol==col)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
bool CListCtrlCl::FindItemColor(int col,int row,COLORREF &color) //查找颜色
{
 int flag = 0;
 for (POSITION pos = m_ptrListItem.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_ptrListItem.GetNext(pos);
  if (pColor->nCol==col&&pColor->nRow==row)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
void CListCtrlCl::SetColColor(int col,COLORREF color) //设置列颜色
{
 stColor *pColor  = new stColor;
 pColor->nCol = col;
 pColor->rgb = color;
 m_ptrListCol.AddTail(pColor);
}
void CListCtrlCl::SetItemColor(int col,int row,COLORREF color) //设置格子颜色
{
 stColor *pColor  = new stColor;
 pColor->nCol = col;
 pColor->nRow = row;
 pColor->rgb = color;
 m_ptrListItem.AddTail(pColor);
}
void CListCtrlCl::SetRowHeigt(int nHeight) //高置行高
{
 m_nRowHeight = nHeight;

 CRect rcWin;
 GetWindowRect(&rcWin);
 WINDOWPOS wp;
 wp.hwnd = m_hWnd;
 wp.cx = rcWin.Width();
 wp.cy = rcWin.Height();
 wp.flags = SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOOWNERZORDER | SWP_NOZORDER;
 SendMessage(WM_WINDOWPOSCHANGED, 0, (LPARAM)&wp);
}
void CListCtrlCl::SetHeaderFontHW(int nHeight,int nWith) //设置头部字体宽和高
{
 m_Header.m_fontHeight = nHeight;
 m_Header.m_fontWith = nWith;
}
void CListCtrlCl::SetHeaderTextColor(COLORREF color) //设置头部字体颜色
{
 m_Header.m_color = color;
}
BOOL CListCtrlCl::SetTextColor(COLORREF cr)  //设置字体颜色
{
 m_color = cr;
 return TRUE;
}
void CListCtrlCl::SetFontHW(int nHeight,int nWith) //设置字体高和宽
{
 m_fontHeight = nHeight;
 m_fontWith = nWith;
}
void CListCtrlCl::SetColTextColor(int col,COLORREF color)
{
 stColor *pColor = new stColor;
 pColor->nCol = col;
 pColor->rgb = color;
 m_colTextColor.AddTail(pColor);
}
bool CListCtrlCl::FindColTextColor(int col,COLORREF &color)
{
 int flag = 0;
 for (POSITION pos = m_colTextColor.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_colTextColor.GetNext(pos);
  if (pColor->nCol==col)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
bool CListCtrlCl::FindItemTextColor(int col,int row,COLORREF &color)
{
 int flag = 0;
 for (POSITION pos = m_ItemTextColor.GetHeadPosition();pos!=NULL;)
 {
  stColor *pColor = (stColor*)m_ItemTextColor.GetNext(pos);
  if (pColor->nCol==col&&pColor->nRow==row)
  {
   flag = 1;
   color = pColor->rgb;
   break;
  }
 }
 if (1==flag)
 {
  return true;
 }
 return false;
}
void CListCtrlCl::SetItemTextColor(int col,int row,COLORREF color)
{
 stColor *pColor = new stColor;
 pColor->nCol = col;
 pColor->nRow = row;
 pColor->rgb = color;
 m_ItemTextColor.AddTail(pColor);
}

HeaderCtrlCl.h的内容如下:

#pragma once


// CHeaderCtrlCl

class CHeaderCtrlCl : public CHeaderCtrl
{
 DECLARE_DYNAMIC(CHeaderCtrlCl)

public:
 CHeaderCtrlCl();
 virtual ~CHeaderCtrlCl();

protected:
 DECLARE_MESSAGE_MAP()
public:
 afx_msg void OnPaint();
 CStringArray m_HChar;
 CString m_Format; //表示对齐类型的整型数组,0表示左对齐,1表示中间对齐,2表示右对齐
public:
 int m_R;
 int m_G;
 int m_B;
 int m_Gradient; // 画立体背景,渐变系数
 float m_Height;  //表头高度,这是倍数,
 int m_fontHeight; //字体高度
 int m_fontWith;   //字体宽度
 COLORREF m_color;
 LRESULT OnLayout( WPARAM wParam, LPARAM lParam );
};


 

HeaderCtrlCl.cpp的内容如下:

// HeaderCtrlCl.cpp : 实现文件
//

#include "stdafx.h"
#include "DemoList.h"
#include "HeaderCtrlCl.h"


// CHeaderCtrlCl

IMPLEMENT_DYNAMIC(CHeaderCtrlCl, CHeaderCtrl)

CHeaderCtrlCl::CHeaderCtrlCl()
: m_R(171)
, m_G(199)
, m_B(235)
, m_Gradient(8)
{
 m_Format = "";
 m_Height = 1;
 m_fontHeight = 15;
 m_fontWith = 0;
 m_color = RGB(0,0,0);
}

CHeaderCtrlCl::~CHeaderCtrlCl()
{
}


BEGIN_MESSAGE_MAP(CHeaderCtrlCl, CHeaderCtrl)
 ON_WM_PAINT()
 ON_MESSAGE(HDM_LAYOUT, OnLayout)
END_MESSAGE_MAP()

 

// CHeaderCtrlCl 消息处理程序

 

void CHeaderCtrlCl::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 // TODO: 在此处添加消息处理程序代码
 // 不为绘图消息调用 CHeaderCtrl::OnPaint()
 int nItem;
 nItem = GetItemCount();//得到有几个单元
 for(int i = 0; i<nItem;i ++)
 {
  CRect tRect;
  GetItemRect(i,&tRect);//得到Item的尺寸
  int R = m_R,G = m_G,B = m_B;
  CRect nRect(tRect);//拷贝尺寸到新的容器中
  nRect.left++;//留出分割线的地方
  //绘制立体背景
  for(int j = tRect.top;j<=tRect.bottom;j++)
  {
   nRect.bottom = nRect.top+1;
   CBrush _brush;
   _brush.CreateSolidBrush(RGB(R,G,B));//创建画刷
   dc.FillRect(&nRect,&_brush); //填充背景
   _brush.DeleteObject(); //释放画刷
   R-=m_Gradient;G-=m_Gradient;B-=m_Gradient;
   if (R<0)R = 0;
   if (G<0)G = 0;
   if (B<0)B= 0;
   nRect.top = nRect.bottom;
  }
  dc.SetBkMode(TRANSPARENT);
  CFont nFont ,* nOldFont;
  //dc.SetTextColor(RGB(250,50,50));
  dc.SetTextColor(m_color);
  nFont.CreateFont(m_fontHeight,m_fontWith,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("宋体"));//创建字体
  nOldFont = dc.SelectObject(&nFont);

  UINT nFormat = 1;
  if (m_Format[i]=='0')
  {
   nFormat = DT_LEFT;
   tRect.left+=3;
  }
  else if (m_Format[i]=='1')
  {
   nFormat = DT_CENTER;
  }
  else if (m_Format[i]=='2')
  {
   nFormat = DT_RIGHT;
   tRect.right-=3;
  }
  TEXTMETRIC metric;
  dc.GetTextMetrics(&metric);
  int ofst = 0;
  ofst = tRect.Height() - metric.tmHeight;
  tRect.OffsetRect(0,ofst/2);
  dc.DrawText(m_HChar[i],&tRect,nFormat);
  dc.SelectObject(nOldFont);
  nFont.DeleteObject(); //释放字体
 }
 //画头部剩余部分
 CRect rtRect;
 CRect clientRect;
 GetItemRect(nItem - 1,rtRect);
 GetClientRect(clientRect);
 rtRect.left = rtRect.right+1;
 rtRect.right = clientRect.right;
 int R = m_R,G = m_G,B = m_B;
 CRect nRect(rtRect);
 //绘制立体背景
 for(int j = rtRect.top;j<=rtRect.bottom;j++)
 {
  nRect.bottom = nRect.top+1;
  CBrush _brush;
  _brush.CreateSolidBrush(RGB(R,G,B));//创建画刷
  dc.FillRect(&nRect,&_brush); //填充背景
  _brush.DeleteObject(); //释放画刷
  R-=m_Gradient;G-=m_Gradient;B-=m_Gradient;
  if (R<0)R = 0;
  if (G<0)G = 0;
  if (B<0)B= 0;
  nRect.top = nRect.bottom;
 }
}
LRESULT CHeaderCtrlCl::OnLayout( WPARAM wParam, LPARAM lParam )
{
 LRESULT lResult = CHeaderCtrl::DefWindowProc(HDM_LAYOUT, 0, lParam);
 HD_LAYOUT &hdl = *( HD_LAYOUT * ) lParam;
 RECT *prc = hdl.prc;
 WINDOWPOS *pwpos = hdl.pwpos;

 //表头高度为原来1.5倍,如果要动态修改表头高度的话,将1.5设成一个全局变量
 int nHeight = (int)(pwpos->cy * m_Height);
 pwpos->cy = nHeight;
 prc->top = nHeight;
 return lResult;
}

 

天地图下载带审图号(审图号: GS(2024)0650号)的 “行政区划” 数据(含shp文件下载地址) 在科研投稿论文过程中,多数期刊杂志要求我们制作涉及国界的图件,必须使用自然资源部地图技术审查中心发布的标准地图底图。如地理学报、地理科学等期刊的投稿指南中写到:非标准底图本刊不予发表!(如图1.1所示)如果一定要用,凡涉国界图件(国内部分地区、全国、世界部分地区、全球)必须使用自然资源部标准地图服务系统标准地图底图(http://bzdt.ch.mnr.gov.cn/)(如图1.1所示)或国家测绘局地理信息局标准地图底图(如图1.2所示),所用底图边界要完全无修改(包括南海诸岛位置)。 阅读详情

相关推荐

从零开始:YOLOv8车牌检测模型训练全流程实战

本文详细介绍了从零开始训练YOLOv8车牌检测模型的全流程实战指南。内容涵盖环境搭建、数据集收集与标注、模型配置与训练、评估测试及高级优化技巧。通过使用预训练模型和迁移学习,开发者可以高效构建精准的车牌检测系统,并掌握模型导出与部署的关键步骤。

weixin_29061041的博客 335

CHeaderCtrl详解

登录 注册 帮助高级搜索编辑实验创建词条首页百科分类排行榜随便看看百科问答词条统计浏览次数: 874 次编辑次数: 1 次 历史版本更新时间: 2009-11-13麦兜管理员词条创建者发短消息程序员百科 &gt;&gt; 类和对象 &gt;&gt; MFC最新历史版本 :CHeaderCtrl返回词条编辑时间:11-13 16:13 历史版本编辑者:麦兜 历史版本:内容长度:12662 图片数:4...

wmnmtm的专栏 538

Docker安装Nacos(详细教程)

Docker安装Nacos的步骤相对直接,但需要注意一些细节以确保安装成功。

weixin_73060959的博客 1407

CListCtrl控件功能扩展总结

所有者绘制(owner-draw)和自定义绘制(custom-draw) 这两种方法应该是控件自绘中最常用到的普遍方法。(当然如果只是改变控件颜色只需要处理WM_CTLCOLOR消息就可以了。)但是对于这两者的区别,可能很多开发人员并不是很清楚。如果你做过控件自绘,可能对owner-draw已经很熟悉了。一般只要设置控件的自绘风格属性,并实现owner-draw的消息(WM_DRAWITEM)响

airbigboy的专栏 1782

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

Mac安装Claude Code的3种方式及5类报错解决方案

介绍在Mac上安装Claude Code的3种实测可行方式(官方dmg、Homebrew+ARM原生构建、Docker容器化),并针对Gatekeeper签名验证失败、Rosetta 2内存对齐崩溃、Python ABI兼容性冲突等5类高频报错提供根因分析与可复现解决方案,覆盖M1–M3及Intel

weixin_28728443的博客 365

C++ 控件之 CHeadCtrl

表头控制(CHeaderCtrl)通常应用在窗口中的文本或数据的列表之上。一般为数据列的标题,可以包括多个部分,用户可以拖动每个部分并可以控制每列的宽度。表头控制类提供了普通表头控制的基本方法,只有在WINDOWS95以后版本系统中才提供,其方法包含在afxcmn.h文件中,一般与标签控制(CTabCtrl)和列表控制(CListCtrl)组合使用。(一)表头控制的对象结构1、表头

VGS® 研发笔记 1806

Avalonia 超级详细学习指南

什么是 Avalonia?Avalonia 是一个开源的、跨平台的 GUI 框架,允许开发者使用 XAML 和 C# 构建现代化、高性能的桌面应用程序。与其他框架相比,Avalonia 具有强大的跨平台能力和灵活的界面设计。} }()Avalonia 的特点和优势跨平台性:Avalonia 可以在 Windows、Linux、macOS 等多个平台上运行,开发者可以编写一套代码,然后在不同的操作系统上运行相同的应用程序。

仰望星空的博客 1万+

MFC学习之修改设置控件字体显示和颜色参数

MFC控件是MFC类库中的一部分,提供了各种可视化界面元素,用于构建用户界面。以下是一些常见的MFC控件及其功能和属性设置:1、CButton(按钮):用于触发特定操作或执行选定动作的控件。可以设置文本、图像、样式等。2、CEdit(编辑框):用于接收和显示文本输入的控件。可以设置文本内容、大小、样式、限制输入等。3、CListCtrl(列表控件):用于以列表形式展示数据的控件。支持单列或多列数据,可以设置每列的数据类型、宽度、排序等。

分享型博主 9347

YOLO26涨点改进 | 检测头Head创新改进篇 | 利用RFAConv感受野注意力卷积改进YOLO26检测头,RFAHead感受野注意力检测头,助力小目标检测高效涨点

YOLO26作为轻量化目标检测模型的新一代标杆,凭借高效的Backbone与Neck结构,在实时检测场景中表现突出,但原生检测头仍存在核心痛点——感受野固定、小目标特征感知薄弱、多尺度目标适配不足,导致在小目标密集、复杂背景遮挡等场景中漏检率偏高、定位精度不足。

qq_36130719的博客 170

Android Shadow插件化框架分析与集成(一)

到此为止,本篇文章先介绍到这里,本篇文章主要介绍了:从源码的角度去集成shadow框架,从下载源码开始,到集成到自己的项目中,其中插件项目我是新建的demo应用,宿主应用是之前搭的一个MVP框架。文章中一步一步详细的介绍了宿主该如何集成,并提供了源码;介绍了插件该如何集成,同时也提供了源码。文章中还介绍了gradle的版本与AGP版本使用不当造成的问题,以及shadow源码的gradle版本与APG版本的配置,及和宿主插件应用gradle版本与AGP版本的关系。

superzhang6666的博客 1235

改变 自绘 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景及其动态创建中的问题

以下是网上流传自绘CListCtrl控件的方法:不过有几个问题需要注意一下: 以下功能在静态创建时没有问题,动态创建是会出现两个问题 一.控件的表没有自动重绘,没有实现换肤。在CListCtrlCL类中设置断点,进入不了CListCtrlCl::DrawItem(),原因是在动态创建是没有LVS_OWNERDRAWFIXED风格。      解决办法:   m_list->Cre

曲终人散 7881

【人工智能之深度学习】15. 工业时序预测实战:LSTM与TCN融合的装备故障预警系统设计与实现

摘要:工业装备故障预警是智能制造领域的核心技术之一,其通过分析传感器时序数据实现故障提前预测,可显著降低运维成本并提升设备可靠性。本文针对工业时序数据多源异构、非平稳性、噪声干扰及样本不平衡等挑战,提出一种LSTM与TCN融合的故障预警架构——利用TCN捕捉局部时序特征,结合注意力增强LSTM建模长期依赖关系,通过门控机制实现特征自适应融合。以3MW风电齿轮箱为研究对象,设计包含数据预处理、特征工程、模型训练及部署的完整流程,实验结果表明,该融合模型准确率达94.6%,故障预测提前量较单一模型提升30%以上

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1443

[转]改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景

Technorati 标签: VC,ListCtrl 原文地址:http://www.vckbase.com/document/viewdoc/?id=1855 改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景 作者:effortsboysZYB 下载源代码 摘要 用CListCtrl来显示数据比较方便,有时候我们需要标注某一列或某一个单元格的背景和字体颜色

jiaolongdy的专栏 1317

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景(二)

覆盖基类InsertColumn进行列信息保存 01.int CListCtrlCl::InsertColumn(int nCol, LPCTSTR lpszColumnHeading, 02.int nFormat , 03.int nWidth , 04.int nSubItem ) 05.{ 06.m_Header.m_HChar.Add(lpszColumnHeading); ...

人生几何的博客 607

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景(一)

一、 实现过程 1.表头修改 新建一个MFC类CHeaderCtrlCl,其基类为CHeaderCtrl,响应OnPaint消息实现自绘,实现代码请看源代码(由于代码较占篇幅,所以就不贴上来了,抱歉),在头文件中定义函数LRESULT OnLayout( WPARAM wParam, LPARAM lParam ),之后手动添加消息响应ON_MESSAGE(HDM_LAYOUT, OnLayo...

人生几何的博客 587

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 解决TCP网络传输“粘包”问题
下一篇: COM 组件设计与应用----起源及复合文件
htt9931
博客等级 码龄24年 43粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值