🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: cn.bbs.comp.program
Article #1186

vc���ָ��68ƪ(7)

#1186
From: �ϵ�
Date: Sun, 19 Apr 1998 00:00
352 lines
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

--
�� ��Դ:���ϴ�С�ٺ���Ϣ����վ bbs.nju.edu.cn��[FROM: a507yjh.nju.edu]
Technical Details
Message-ID: <3OAiPE$tTB@bbs.nju.edu.cn>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail

Show 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