Article View: cn.bbs.comp.program
Article #1186vc���ָ��68ƪ(7)
From: �ϵ�
Date: Sun, 19 Apr 1998 00:00
Date: Sun, 19 Apr 1998 00:00
352 lines
15580 bytes
15580 bytes
2m������:m TINA (�ռ�����)
2m�� ��:m RAD
2m�� ��:m VC��̼���68ƪ(7)
2m����վ:m '3m�Ͻ�ɺ�m' (Mon Apr 6 08:37:39 1998) , 5mվ���ż�m
[������ҳ] [����������] [ȫ��������]
������: Zeemon (������), ����: Visual
�� ��: vc���ָ��68ƪ(7)
����վ: BBS ˮľ�廪վ (Thu Oct 23 12:50:06 1997)
41�����һ��������̬��ѹ��ť
����ʹ���µ�BS_PUSHBUTTON ���λ�ͼ����Լ���ť������һ����̬��
ѹ��ť��������ף�ֻ�轫����Ͱ�ť�������Ի��в�ָ������Push��like��
�ɡ������κθ��ӳ���Ϳ��Գ�Ϊ��̬��ѹ��ť��
42����ζ�̬�����ؼ�
����һ���ؼ������ʵ�������Create��Ա�������������������
�£����ָ��WS_VISBLE��ǩ����ջ�з���ؼ���������̬�ش���һ����ѹ��
ť�ؼ���
//In class declaration (.H file ).
private :
CButton* m _pButton ;
//In class implementation (.cpp file ) .
m_pButton =new CButton ;
ASSERT_VALID (m_pButton);
m_pButton ��>Create (_T ("Button Title ") , WS_CHILD ��WS_VISIBLE ��
BS_PUSHBUTTON.
Crect ( 0, 0, 100 , 24) , this , IDC _MYBUTTON )
43��������Ʊ༭���е����ַ�
����û��ڱ༭�ؼ���ֻ����������֣�����ʹ��һ�����ı༭�ؼ���ָ
���µĴ�����־ES_NUMBERS,����Windows 95�����ӵı�־���ñ�־���� �༭��
��ֻ���������ַ�����û���Ҫ���ӵı༭�ؼ�������ʹ��Microsoft ������
�༭�ؼ�������һ�������õ�OLE���ƿؼ���
���ϣ��ʹ��OLE ���ƿؼ��Լ������ַ��������һ��CEdit �ಢ����
WM_CHAR��Ϣ��Ȼ��ӱ༭�ؼ��й��˳��ض����ַ����ȣ�ʹ��ClassWizard ��
��һ�� CEdit�������࣬��Σ��ڶԻ�����ָ��һ����Ա�������༭�ؼ�������
OnInitdialog ���CWnd: : SubclassDlgItem .
//In your dialog class declaration (.H file )
private :
CMyEdit m_wndEdit ; // Instance of your new edit control .
//In you dialog class implementation (.CPP file )
BOOL CSampleDialog : : OnInitDialog ( )
{
��
//Subclass the edit lontrod .
m_wndEdit .SubclassDlgItem (IDC_EDIT,this );
��
}
ʹ��ClassWizard����WM_CHAR��Ϣ������nChar������������ִ�еIJ�������
������ȷ���Ƿ��ġ������ַ�����˵���������ʾ��ĸ�ַ�����ַ�����ĸ
�ַ������CWnd ; OnChar��������OnChar.
//Only display alphabetic dharacters .
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )
{
//Determine if nChar is an alphabetic character .
if (: : IsCharAlpha ( ( TCHAR) nChar ) )
CEdit : : OnChar (nChar, nRepCnt , nFlags );
}
���Ҫ���ַ����ܽ��������Ĺ��nChar����CEdit : : OnChar��
Ȼ��CEdit: : OnChar����CWnd: : Default��ȡԭ����wParam ��lParam ��ֵ ����
���Dz��еġ�Ҫ��һ���ַ���Ҫ������nChar��Ȼ�����Ĺ��nChar����
CWnd: : DefWindowProc������˵������ν��ַ�ת��Ϊ��д��
//Make all characters uppercase
void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags )
{
//Make sure character is uppercase .
if (: : IsCharAlpha ( .( TCHAR) nChar)
nChar=: : CharUpper (nChar ) ;
//Bypass default OnChar processing and directly call
//default window proc.
DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt , nFlags )) ;
}
44����θı�ؼ�����ɫ
�����ַ�������һ�������ڸ�����ָ���ؼ�����ɫ����������MFC4.0�µ���Ϣ��
���ڿؼ�����ָ����ɫ��
���ؼ���Ҫ������ɫʱ����������ø����ڣ�ͨ���ǶԻ���
CWnd: : OnCrtlColor,�����ڸ������������øú���ָ���ؼ����µĻ滭��
�ԡ����磬�������뽫�Ի��е����б༭�ؼ��ı���ɫ��Ϊ��ɫ��
HBRUSH CAboutDig : : OnCtlColor (CDC * pDCM , CWnd * pWnd , UINT nCtlColor)
{
HBRUSH hbr = CDialog : : OnCtlColor (pDC, pWnd , nCtlColor );
//Draw red text for all edit controls .
if (nCtlColor= = CTLCOLOR_EDIT )
pDC ��> SetTextColor (RGB (255 , 0 , 0 , ) ) ;
return hbr ;
}
Ȼ������ÿ�������ڱ��봦��֪ͨ��Ϣ��ָ��ÿ���ؼ��Ļ滭���ԣ����ԣ�
���ַ���������ȫ���������ķ������ؼ��������Ϣ��ָ���滭���Ը������?
��Ϣ���������û���������֪ͨ��Ϣ���ȷ����ڣ������û�д���
����ؼ�������һ�����Ʋ�ɫ�б��ؼ�������ѭ�������衣
���ȣ�ʹ��ClassWizard ����һ��CListBox �������ಢΪ��������������
��Ա��
class CMyListBox ; publilc CListBox
{
��
private;
COLORREF m_clrFor ; // foreground color
COLORREF m_clrBack ; //background color
Cbrush m_brush ; //background brush
��
} ;
��Σ�����Ĺ��캯���У���ʼ������С�
CMyListBox : : CMyListBox ()
{
//Initialize data members .
m_clrFore =RGB (255 , 255 , 0) ; // yellow text
m_clrBack=RGB (0 , 0 , 255) ; // blue background
m_brush . CreateSolidBrush (m _clrBack );
}
���ʹ��ClassWizard���?���WM_CTLCOLOR(=WM_CTLCOLOR)��Ϣ��ָ����
�Ļ滭���ԡ�
HBRUSH CMyListBox : : CtlColor (CDC* pDC, UINT nCtlColor )
{
pDC��>SetTextColor (m_clrFore);
pDC��>SetBkColor (m_clrBack);
return (HBRUSH) m_brush.GetSafeHandle ()
}
���ڣ��ؼ������Լ�������λ滭���븸�����ء�
45�������б������Ӷ����ʱ��η�ֹ��˸
����CWnd::SetRedraw ����ػ���־���Խ�ֹCListBox�����ߴ��ڣ��ػ���
�����б����Ӽ�����ʱ���û���������ػ���־��Ȼ���������ָ��ػ�
��־��Ϊȷ���ػ��б����������SetRedraw (TRUE) ֮�����CWnd::Invalidate
��
//Disable redrawing.
pListBox->SetRedraw (FALSE);
//Fill in the list box gere
//Enable drwing and make sure list box is redrawn.
pListBox->SetRedraw (TRUE);
pListBox->Invalidate ();
46�������༭�ؼ�������ı�
����û��CEdit:: AppendText�����û�ֻ���Լ��������������
CEdit:: SetSel�ƶ����༭�ؼ�ĩβ��Ȼ�����CEdit:: ReplaceSel�����
����������AppendText ��һ��ʵ�ַ�����
void CMyEdit:: AppendText (LPCSTR pText)
{
int nLen=GetWindowTextLength ();
SetFocus ();
SetSel (nLen, nLen);
ReplaceSel (pText);
}
47����η���Ԥ�����GDI����
����ͨ�����CDC:: SlectStockObjectʹ��Windows�ļ���Ԥ����Ķ�����
��ˢ�ӡ����Լ����塣����ʹ����WindowsԤ����ıʺ�ˢ��GDI�������Ӵ��л�һ
����Բ��
//Draw ellipse using stock black pen and gray brush.
void CSampleView:: OnDraw (CDC* pDC)
{
//Determine size of view.
CRect rcView;
GetClientRect (rcView);
//Use stock black pen and stock gray brush to draw ellipse.
pDC->SelectStockObject (BLACK_PEN);
pDC->SelectStockObject (GRAY_BRUSH)
//Draw the ellipse.
pDC->Ellipse (reView);
}
Ҳ���Ե����µ�SDK����GetSysColorBrush��ȡһ��ϵͳ��ɫˢ�ӣ������ñ���
ɫ���Ӵ��л�һ����Բ��
void CsampleView:: OnDraw (CDC* pDC)
{
//Determine size of view.
CRect rcView;
GetClientRect (rcView);
//Use background color for tooltips brush.
CBrush * pOrgBrush=pDC->SelectObject (
CBrush::FromHandle (::GetSysColorBrush (COLOR_INFOBK)));
//Draw the ellipse.
pDC->Ellipse (rcView);
//Restore original brush.
pDC->SelectObject (pOrgBrush);
}
48����λ�ȡGDI�����������Ϣ
���Ե���GDIObject:: GetObject���������ָ��ͼ���豸����Ϣд�뵽
�����������˼������õĸ�����
//Determine if font is bold.
BOOL IsFontBold (const CFont&font)
{
LOGFONT stFont;
font.GetObject (sizeof (LOGFONT), &stFont);
return (stFont.lfBold)? TRUE: FALSE;
}
//Return the size of a bitmap.
CSize GetBitmapSize (const CBitmap&bitmap)
{
BITMAP stBitmap;
bitmap.GetObject (sizeof (BITMAP), &stBitmap);
return CSize (stBitmap.bmWidth, stBitmap. bmHeight);
}
//Create a pen with the same color as a brush.
BOOL CreatePenFromBrush (Cpen&pen, cost Cbrush&brush)
{
LOGBRUSH stBrush;
brush.Getobject (sizeof (LOGBRUSH), &stBrush);
return pen. Createpen (PS_SOLID, 0, stBrush.ibColor);
}
49�����ʵ��һ����Ƥ�����
CRectTracker��һ�������õ��࣬����ͨ�����CRectTracker::
TrackRubberBand
��ӦWM_LBUTTONDOWN��Ϣ������һ����Ƥ����Ρ��������ʹ��CRectTracker�ƶ�
�������Ӵ��е���ɫ��Բ�Ĵ�С�Ǻ��������顣
���ȣ����ļ���������һ��CRectTracker��ݳ�Ա��
class CSampleView : Public CView
{
��
public :
CrectTracker m_tracker;
��
};
��Σ����ĵ���Ĺ��캯���г�ʼ��CRectTracker ����
CSampleDoc:: CSampleDOC ()
{
//Initialize tracker position, size and style.
m_tracker.m_rect.SetRect (0, 0, 10, 10);
m_tracker.m_nStyle=CRectTracker:: resizeInside |
CRectTracker:: dottedLine;
}
Ȼ����OnDraw�����л���Բ���ټ����Σ�
void CSampleView:: OnDraw (CDC* pDC)
{
CSampleDoc* pDoc=GetDocument ();
ASSERT_VALID (pDoc);
//Select blue brush into device context.
CBrush brush (RGB (0, 0, 255));
CBrush* pOldBrush=pDC->SelectObject (&brush);
//draw ellipse in tracking rectangle.
Crect rcEllipse;
pDoc->m_tracker.GetTrueRect (rcEllipse);
pDC->Ellipse (rcEllipse);
//Draw tracking rectangle.
pDoc->m_tracker.Draw (pDC);
//Select blue brush out of device context.
pDC->Selectobject (pOldBrush);
}
���ʹ��ClassWizard����WM_LBUTTONDOWN��Ϣ���������������롣�öδ���
�����������������Ϸš��ƶ�����������Բ�Ĵ�С��
void CSampleView::OnLButtonDown (UINT nFlags, CPoint point)
{
//Get pointer to document.
CSampleDoc* pDoc=GetDocument ();
ASSERT_VALID (pDoc);
//If clicked on ellipse, drag or resize it. Otherwise create a
//rubber-band rectangle nd create a new ellipse.
BOOL bResult=pDoc->m_tracker.HitTest (point)!=
CRectTracker::hitNothing;
//Tracker rectangle changed so update views.
if (bResult)
{
pDoc->m_tracker.Track (this,point,TRue);
pDoc->SetModifiedFlag ();
pDoc->UpdateAllViews (NULL);
}
else
pDoc->m-tracker.TrackRubberBand (this,point,TRUE);
CView:: onLButtonDown (nFlags,point);
}
50����θ��·�ת������ɫ���ı�
����CDC:: SetBkmode������OPAQUE�õ�ǰ�ı�����ɫ��䱳�������ߵ���
CDC::SetBkMode������TRANSPAARENTʹ�������ֲ��䣬�����ַ������������ñ���
ģʽ���������ñ���ģʽΪTRANSPARENT���������θ��´����û�ɫ�����Ӱ����
�ı�����ɫ���ں�ɫ��֮�����������˱���ģʽ��Ȼ�ɼ�
void CSampleView:: OnDraw (CDC* pDC)
{
//Determint size of view.
CRect rcView;
GetClientRect (rcVieew);
//Create sample string to display.
CString str (_T ("Awesome Shadow Text������"));
//Set the background mode to transparent.
pDC->SetBKMode (TRANSPARENT);
//Draw black shadow text.
rcView.OffsetRect (1, 1);
pDc->SetTextColor (RGB (0, 0, 0));
pDC->DrawText (str, str.GetLength (), rcView,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
//Draw red text.
rcView.OffsetRect (-1,-1);
pDc->SetTextColor (RGB (255, 0, 0));
pDC->DrawText (str, str.GetLength (), rcView,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
--
�� ��Դ:��BBS ˮľ�廪վ bbs.net.tsinghua.edu.cn��[FROM: sapphire.ncic.a]
[������ҳ] [����������] [ȫ��������]
--
m;37m�� ��Դ:���Ͻ�ɺ� bbs.njupt.edu.cn��[FROM: pc05.info.njupt]m
--
[m[1;33m�� ��Դ:���ϴ�С�ٺ���Ϣ����վ bbs.nju.edu.cn��[FROM: a507yjh.nju.edu][m
Technical Details
Message-ID:
<3OAiPE$tTB@bbs.nju.edu.cn>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: Chinese,GB X-Google-Thread: fc86e,ee2d72cc309162d4,start X-Google-Attributes: gidfc86e,public From: mendy.bbs@bbs.nju.edu.cn (�ϵ�) Subject: vc���ָ��68ƪ(7) Date: 1998/04/19 Message-ID: <3OAiPE$tTB@bbs.nju.edu.cn> X-Deja-AN: 345948187 X-Filename: Programming/M.893022398.A Organization: nju_bbs Newsgroups: cn.bbs.comp.program