亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stationary_col.shtml

?? mfc資源大全包含MFC編程各個方面的源碼
?? SHTML
字號:
<HTML>
<HEAD>
   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
   <META NAME="Author" CONTENT="Zafir Anjum">
   <TITLE>CListCtrl - Stationary Columns</TITLE>
</HEAD>
<body background="../fancyhome/back.gif" bgcolor="#FFFFFF" link="#B50029" vlink="#8E2323" alink="#FF0000" bgproperties="fixed">
<table WIDTH="100%">
<tr WIDTH="100%">
<td align=center><!--#exec cgi="/cgi/ads.cgi"--><td>
</tr>
</table>


<CENTER>
<H3>
<FONT COLOR="#AOAO99">Stationary Columns</FONT></H3></CENTER><hr>

This article was contributed by <a href="mailto:lauram3017@aol.com">Laura Michaels</a>.


<p>There were two things I had to do in order to get stationary
columns in a CListCtrl.  One was to make sure the CListCtrl 
redraws its contents when horizontal scrolling occurs.  The 
other was to properly redraw the text for the stationary columns
in DrawItem.  To do this, I placed the DrawText for the stationary
columns near the end of DrawItem.  I used FillRect to blank out 
the area underneath before calling DrawText.  I also needed 
to properly set the rectangle DrawText uses for drawing.

<p>The CListCtrl moves the location of the text to be drawn
when scrolling occurs.  The GetItemRect call in DrawItem
reflects the change in text location.  To keep items from
scrolling, you can draw them at their original positions
instead of the current position returned by GetItemRect.
In the example code, when drawing a stationary column, I use the
current vertical position from GetItemRect.  However, I use
a horizontal position of 0 and a width equivalent to the width
of the column.  The CListCtrl maintains the top right location
in its client area as 0 even when scrolling occurs.  Only the
coordinates returned from GetItemRect change during scrolling.

<p>The example only makes the first column stationary.  The technique
can be extended to multiple columns.  To do so, move the DrawText
code for the stationary columns after the code for drawing regular
columns.  Clear the area underneath each stationary column using 
FillRect before drawing.  Set the horizontal position (the x 
location and width) used by DrawText to the original horizontal 
coordinates of the column instead of the horizontal coordinates 
returned by GetItemRect.

<hr>
<p>I put together a very simple test case by placing the following
in a header file in a view or dialog class:

<PRE><TT><FONT COLOR="#990000">CListCtrlCol lv;
</FONT></TT></PRE>

This code goes in the .cpp file for that class:

<PRE><TT><FONT COLOR="#990000">
if (lv.Create (WS_CHILD | WS_BORDER | WS_VISIBLE | WS_TABSTOP,
   CRect (10, 10, 200, 200), this, IDC_LIST) != FALSE)
{
   LV_COLUMN lvc;
   lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
   lvc.iSubItem = 0;
   lvc.fmt =  LVCFMT_LEFT;
   lvc.pszText = "Column 1";
   lvc.cx = 75;
   lvc.iSubItem = 0;
   lv.InsertColumn(0, &lvc);
   lvc.pszText = "Column 2";
   lvc.iSubItem = 1;
   lvc.cx = 75;
   lv.InsertColumn(1, &lvc);
   lvc.iSubItem = 2;
   lvc.pszText = "Column 3";
   lvc.cx = 75;
   lv.InsertColumn(2, &lvc);

   LV_ITEM lvi;
   lvi.mask = LVIF_TEXT;
   lvi.iSubItem = 0;
   lvi.iItem = 0;
   lvi.pszText = "String 1";
   lv.InsertItem(&lvi);
   lv.SetItemText(0, 1, "String 2");
   lv.SetItemText(0, 2, "String 3");
   lvi.iItem = 1;
   lvi.pszText = "String a";
   lv.InsertItem(&lvi);
   lvi.iItem = 2;
   lvi.pszText = "String b";
   lv.InsertItem(&lvi);
}







// ListCtrlCol.cpp : implementation file
//

#include "stdafx.h"
#include "test3.h"
#include "ListCtrlCol.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CListCtrlCol

CListCtrlCol::CListCtrlCol ()
{
}

CListCtrlCol::~CListCtrlCol ()
{
}


BEGIN_MESSAGE_MAP(CListCtrlCol, CListCtrl)
        //{{AFX_MSG_MAP(CListCtrlCol)
        ON_WM_HSCROLL()
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CListCtrlCol message handlers

BOOL CListCtrlCol::PreCreateWindow (CREATESTRUCT& cs) 
{
        // TODO: Add your specialized code here and/or call the base class
   cs.style &= ~LVS_TYPEMASK;
   cs.style |= LVS_REPORT | LVS_OWNERDRAWFIXED | LVS_ALIGNTOP | 
      LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS;
        
        return CListCtrl::PreCreateWindow (cs);
}

void CListCtrlCol::OnHScroll (UINT nSBCode, UINT nPos, CScrollBar*
pScrollBar) 
{
        // TODO: Add your message handler code here and/or call default
        CListCtrl::OnHScroll(nSBCode, nPos, pScrollBar);
// Needed to ensure redraw of listctrl is done properly when 
//      scrolling occurs.
   CRect clientrect;
   GetClientRect (clientrect);
   InvalidateRect (clientrect);
}


void CListCtrlCol::DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct)
{
   CDC* pDC = CDC::FromHandle (lpDrawItemStruct->hDC);
   CRect rcItem (lpDrawItemStruct->rcItem);
   int nItem = lpDrawItemStruct->itemID;
   char szItem[256];
   char szSubItem[256];
   COLORREF clrTextSave;
   COLORREF clrBkSave;

// Get information on item to be drawn.
   LV_ITEM lvi;
   lvi.mask = LVIF_TEXT | LVIF_STATE;
   lvi.iItem = nItem;
   lvi.iSubItem = 0;
   lvi.pszText = szItem;
   lvi.cchTextMax = sizeof (szItem);
   lvi.stateMask = 0xFFFF;      
   GetItem(&lvi);

   CRect clientrect;
   CRect rcAllLabels;
   GetItemRect (nItem, rcAllLabels, LVIR_BOUNDS);
   GetClientRect (clientrect);
   if (rcAllLabels.right < clientrect.right)
      rcAllLabels.right = clientrect.right;

   BOOL bSelected = lvi.state & LVIS_SELECTED;

// Set colors for drawing.
   if (bSelected)
   {
      pDC->FillRect(rcAllLabels, &CBrush (::GetSysColor(COLOR_HIGHLIGHT)));
      clrTextSave = pDC->SetTextColor (::GetSysColor(COLOR_HIGHLIGHTTEXT));
      clrBkSave = pDC->SetBkColor (::GetSysColor(COLOR_HIGHLIGHT));
   }
   else
      pDC->FillRect (rcAllLabels, &CBrush (::GetSysColor(COLOR_WINDOW)));
   
   GetItemRect (nItem, rcItem, LVIR_LABEL);


// Draw labels for subitem columns.
   LV_COLUMN lvc;
   lvc.mask = LVCF_FMT | LVCF_WIDTH;

   rcItem.right;
   for (int nColumn = 1; GetColumn (nColumn, &lvc); nColumn++)
   {
      rcItem.left = rcItem.right;
      rcItem.right += lvc.cx;

      int nRetLen = GetItemText (nItem, nColumn, szSubItem, sizeof
(szSubItem));
      if (nRetLen != 0)
      {

         UINT nJustify = DT_LEFT;

         switch(lvc.fmt & LVCFMT_JUSTIFYMASK)
         {
            case LVCFMT_RIGHT:
               nJustify = DT_RIGHT;
                 break;
            case LVCFMT_CENTER:
               nJustify = DT_CENTER;
                 break;
            default:
                 break;
         }
 
         pDC->DrawText (szSubItem, -1, rcItem, nJustify | DT_SINGLELINE |
            DT_NOPREFIX | DT_NOCLIP | DT_VCENTER | DT_END_ELLIPSIS);

      }
   }

// Draw stationary columns.
   GetItemRect (nItem, rcItem, LVIR_LABEL);

   rcItem.right = rcItem.right - rcItem.left;
   rcItem.left = 0;

// Clear the area underneath the stationary columns before drawing
// the text for these columns.   
   if (bSelected)
      pDC->FillRect (rcItem, &CBrush (::GetSysColor(COLOR_HIGHLIGHT)));
   else
      pDC->FillRect (rcItem, &CBrush (::GetSysColor(COLOR_WINDOW)));

   pDC->DrawText(szItem, -1, rcItem, DT_LEFT | DT_SINGLELINE | DT_NOPREFIX |
      DT_NOCLIP | DT_VCENTER | DT_END_ELLIPSIS);

// Reset original colors, if item was selected.
   if (bSelected)
   {
      pDC->SetTextColor (clrTextSave);
      pDC->SetBkColor (clrBkSave);
   }
}









#if !defined(AFX_LISTCTRLCOL_H__A78627B9_2530_11D1_B92C_0800097E3AEF__INCLUDED_)
#define AFX_LISTCTRLCOL_H__A78627B9_2530_11D1_B92C_0800097E3AEF__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// ListCtrlCol.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CListCtrlCol window

class CListCtrlCol : public CListCtrl
{
// Construction
public:
        CListCtrlCol();

// Attributes
public:

// Operations
public:

// Overrides
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CListCtrlCol)
        protected:
        virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
        //}}AFX_VIRTUAL

// Implementation
public:
        virtual ~CListCtrlCol();

        // Generated message map functions
protected:
        //{{AFX_MSG(CListCtrlCol)
        afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
        //}}AFX_MSG

        DECLARE_MESSAGE_MAP()
   virtual void DrawItem (LPDRAWITEMSTRUCT lpDrawItemStruct);
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately
before the previous line.

#endif //
!defined(AFX_LISTCTRLCOL_H__A78627B9_2530_11D1_B92C_0800097E3AEF__INCLUDED_)
</FONT></TT></PRE>





<P>
<HR>
<TABLE BORDER=0 WIDTH="100%" >
<TR>
<TD WIDTH="33%"><FONT SIZE=-1><A HREF="http://www.codeguru.com">Goto HomePage</A></FONT></TD>

<TD WIDTH="33%">
<CENTER><FONT SIZE=-2>&copy; 1998 Zafir Anjum</FONT>&nbsp;</CENTER>
</TD>

<TD WIDTH="34%">
<DIV ALIGN=right><FONT SIZE=-1>Contact me: <A HREF="mailto:zafir@home.com">zafir@home.com</A>&nbsp;</FONT></DIV>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区在线视频| 欧美成人在线直播| 亚洲黄色av一区| 欧美主播一区二区三区| 天堂精品中文字幕在线| 欧美精品乱人伦久久久久久| 水蜜桃久久夜色精品一区的特点| 欧美人动与zoxxxx乱| 日本成人在线网站| 国产精品盗摄一区二区三区| 99久久精品国产麻豆演员表| 一区二区三区不卡视频| 91精品国产品国语在线不卡| 国产伦精品一区二区三区免费 | 91黄色在线观看| 免费成人在线观看视频| 中文字幕一区av| 日韩欧美一区二区免费| 欧美日韩久久一区二区| 久久精品99国产国产精| 一区二区三区在线视频观看58| 欧美一级理论片| 欧美三级乱人伦电影| 成人精品视频一区二区三区| 美女高潮久久久| 日韩精品亚洲专区| 午夜电影久久久| 一区二区三区在线观看视频 | 91豆麻精品91久久久久久| 激情小说亚洲一区| 成人免费观看男女羞羞视频| 成人精品免费网站| 亚洲图片欧美激情| 欧亚洲嫩模精品一区三区| 亚洲乱码精品一二三四区日韩在线| 精品一区在线看| 美女在线观看视频一区二区| 中文字幕在线不卡一区二区三区| 欧美一区二区精品在线| 在线视频国内自拍亚洲视频| 91久久精品一区二区三区| 国产盗摄视频一区二区三区| 免费黄网站欧美| 国产伦精品一区二区三区视频青涩 | 欧美亚洲高清一区| 国产高清在线精品| 国产乱对白刺激视频不卡| 蜜臀av性久久久久av蜜臀妖精| 精品制服美女丁香| 色综合久久久久网| 91九色最新地址| 欧美一区午夜视频在线观看| 精品剧情在线观看| 亚洲色图在线看| 精品在线免费视频| 在线看一区二区| 久久久99精品免费观看不卡| 亚洲一区在线观看网站| 欧美视频中文一区二区三区在线观看| 色婷婷久久久久swag精品| 欧美一区2区视频在线观看| 国产婷婷色一区二区三区| 午夜视频在线观看一区二区三区| 精品一区在线看| 欧美日韩一区二区欧美激情 | 91色在线porny| 国产午夜亚洲精品不卡 | 日韩精品五月天| 色又黄又爽网站www久久| 中文字幕av在线一区二区三区| 亚洲福中文字幕伊人影院| 99re热视频精品| 国产精品人妖ts系列视频| 国产一区二区女| 精品入口麻豆88视频| 亚洲午夜三级在线| 欧美精品久久天天躁| 亚洲成年人影院| 欧美一区二区免费视频| 伊人婷婷欧美激情| 欧美性受xxxx黑人xyx| 亚洲自拍偷拍九九九| 日本精品一区二区三区高清| 亚洲伦在线观看| 欧美精品1区2区| 国产精品中文字幕欧美| 国产精品理论在线观看| 成人免费va视频| 香蕉av福利精品导航| 日韩午夜激情av| 97国产精品videossex| 午夜视黄欧洲亚洲| 久久久国产精华| 91丝袜美女网| 久久99国产精品成人| 国产精品系列在线| 91.麻豆视频| 成人aaaa免费全部观看| 天天亚洲美女在线视频| 国产午夜精品在线观看| 欧美日韩国产高清一区二区三区 | 日韩一区二区精品| 色综合一个色综合亚洲| 日韩av网站免费在线| 国产精品久久久久久久岛一牛影视| 色婷婷亚洲婷婷| 波多野结衣中文一区| 精品一区二区三区视频在线观看| 亚洲色欲色欲www| 国产欧美精品在线观看| 欧美一区二区三区影视| 欧美肥胖老妇做爰| 91高清视频在线| 日本韩国欧美一区| 91丨九色丨蝌蚪丨老版| www.日本不卡| 色婷婷久久久综合中文字幕| 成人国产亚洲欧美成人综合网| 玖玖九九国产精品| 久久精品久久综合| 久草中文综合在线| 日本三级韩国三级欧美三级| 国产精品每日更新| 亚洲黄色免费网站| 午夜精品一区二区三区免费视频| 一区二区在线观看视频在线观看| 久久久高清一区二区三区| 国产女同互慰高潮91漫画| 亚洲欧洲日韩一区二区三区| 中文字幕色av一区二区三区| 亚洲综合免费观看高清完整版| 一区二区三区精品在线| 日本成人在线不卡视频| 国内精品伊人久久久久av一坑 | 精品国产3级a| 亚洲国产精品久久久久秋霞影院 | 一本大道av伊人久久综合| 精品视频1区2区3区| 精品国产精品网麻豆系列| 亚洲免费观看高清完整版在线观看 | 9色porny自拍视频一区二区| 欧美三级韩国三级日本三斤| 国产亚洲福利社区一区| 婷婷丁香激情综合| 色狠狠一区二区| 久久精品一级爱片| 麻豆视频一区二区| 欧美在线观看一二区| 日韩av不卡在线观看| 91成人网在线| 亚洲福利视频一区二区| 91成人免费在线| 亚洲欧美综合色| 日韩中文字幕亚洲一区二区va在线| 亚洲一区二区影院| 午夜精品一区二区三区电影天堂 | 国产日本欧洲亚洲| 国产婷婷色一区二区三区| 亚洲精品国产无天堂网2021| 蜜桃视频一区二区三区| 色噜噜狠狠成人网p站| 亚洲日本欧美天堂| 99久久国产免费看| 中文字幕一区二区三区av| 色综合久久66| 午夜精品在线视频一区| 91精品国产综合久久精品图片 | 欧美精品一区二区在线观看| 久久精品国产亚洲aⅴ| 91精品国产麻豆国产自产在线| 日韩精品91亚洲二区在线观看| 91精品国产综合久久精品| 蜜乳av一区二区三区| 日韩一级黄色片| 国产精品888| 五月婷婷激情综合| 国产亚洲污的网站| 色婷婷精品久久二区二区蜜臂av| 亚洲一区在线视频| 欧美国产日产图区| 色综合久久中文字幕| 一区二区成人在线视频| 久久精品日产第一区二区三区高清版| 成人av网站在线| 老汉av免费一区二区三区| 国产女主播一区| 久久久亚洲精华液精华液精华液| 日本道在线观看一区二区| 紧缚捆绑精品一区二区| 日本午夜一区二区| 亚洲高清久久久| 中文字幕人成不卡一区| 国产婷婷精品av在线| 欧美成人三级在线| 91精品麻豆日日躁夜夜躁| 欧美浪妇xxxx高跟鞋交| 欧美三级蜜桃2在线观看| 色综合久久久久综合体桃花网| 国产一区二区精品久久91| 国产主播一区二区|