🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: cn.bbs.comp.program
1 messages
1 total messages Started by �ϵ� Sun, 19 Apr 1998 00:00
vc���ָ��68ƪ(7)
#1186
Author: �ϵ�
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]
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads