www.pudn.com > m080718003.rar > dlg.cpp


// dlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "TEST.h" 
#include "dlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// Cdlg dialog 
 
 
Cdlg::Cdlg(CWnd* pParent /*=NULL*/) 
	: CDialog(Cdlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(Cdlg) 
	m_num1 = 0; 
	m_num2 = 0; 
	m_num3 = 0; 
	//}}AFX_DATA_INIT 
	m_bIsCreate=FALSE;   //将m_bIsCreate初始化为FALSE,这样判断点击时有没有点击过 
} 
 
 
void Cdlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(Cdlg) 
	DDX_Text(pDX, IDC_EDIT1, m_num1); 
	DDV_MinMaxInt(pDX, m_num1, 0, 20); 
	DDX_Text(pDX, IDC_EDIT2, m_num2); 
	DDX_Text(pDX, IDC_EDIT3, m_num3); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(Cdlg, CDialog) 
	//{{AFX_MSG_MAP(Cdlg) 
	ON_BN_CLICKED(IDC_BUT_ADD, OnButAdd) 
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// Cdlg message handlers 
 
void Cdlg::OnButAdd()  
{ 
	// TODO: Add your control notification handler code here 
 
/* 
	m_btn.Create("维新",BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,CRect(0,0,100,100),this,123);   
	//在Cdlg中增加一个成员变量:CBUTTON % m_ctn,这样会产生一个动态按钮,只是,如果再次点击ADD会出错,于是改进下面的 
	再增加一个成员变量:BOOl % m_bIsCreate 来消除这个问题 */ 
 
/*	if(!m_btn.m_hWnd) 
	{ 
        m_btn.Create("维新",BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,CRect(0,0,100,100),this,123);  
		m_bIsCreate=FALSE; 
	} 
	else 
	{ 
		m_btn.DestroyWindow(); 
		m_bIsCreate=FALSE; 
	}*/ 
 
/*	int num1,num2,num3; 
	char ch1[10],ch2[10],ch3[10]; 
	GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10); 
	GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10); 
 
	num1=atoi(ch1);  //atoi :字符创  转换为 整形 
 	num2=atoi(ch2);    
 
    num3=num1+num2; 
	 
	itoa(num3,ch3,10);  //itoa :整形  转换为 字符型  10 表示十进制 
 
	GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);*/ 
 
 
/*小结: 
    先在 DIALOG1中增加一个ADD按钮  并设置属性 
    在Cdlg的类中增加成员变量  如上 
    编写代码  如上 
    成功!!  记得初始化  m_bIsCreate=FALSE;*/ 
 
 
/*继续小结: 
                                                        **这个才是所得的东西** 
        俩数之和的求法:主要是会用 GetDlgItem(ID号)->GetWindowText(所定义的类型(如ch),进制(如10)) 
        还可以把上边的求和程序改为下面的代码,这样就不用进行转换了  用了这个东西 GetDlgItemInt(*,*,*) 后两个可以缺省   
                 可以运算有符号的数 
                  num1=GetDlgItemInt(IDC_EDIT1); 
                  num2=GetDlgItemInt(IDC_EDIT2); 
                  num3=num1+num2; 
	              GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);  */ 
	  
////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
//以上代码为在“TEST两数之和01”中的代码内容,将其全部注释掉用下面的代码并给出小结:主要是实现先付初值0的功能 
//用的是 View 菜单里的ClassWizad -》Member Variaties  将EDIT1 2 3 分别建立一个成员函数 m_num1 2 3 如下: 
 
 
	UpdateData(); 
	m_num3=m_num1+m_num2;   //得用 UpdateData 
    UpdateData(FALSE);   //再将得到的和放到编辑框里边  这句话就是让它初始化  就得到了和了  真麻烦啊 
                         //若输入字母,而不是数字,则会提示出错  功能还很好的   呵呵 
 
 //还可以在开始建立m_num1 2 3的时候  设定三个数的取值范围 0~20  功能强大啊 
 
}                         
 
 
               /*下面的程序实现的是收缩和扩展的功能*/ 
void Cdlg::OnButton1()  
{ 
	// TODO: Add your control notification handler code here 
     CString str; 
	if(GetDlgItemText(IDC_BUTTON1,str),str=="收缩<<") 
	{ 
		SetDlgItemText(IDC_BUTTON1,"扩展>>"); 
	} 
	else 
	{ 
		SetDlgItemText(IDC_BUTTON1,"收缩<<"); 
	} 
 
	static CRect rectLarge;   //原来的大小 
    static CRect rectSmall;   //收缩后的大小 
     
	if(rectLarge.IsRectNull())  //判断原来的大小与收缩后的大小的关系 
	{ 
		CRect rectSeparator;   //为small的右下角的底部的坐标 
		GetWindowRect(&rectLarge); 
		GetDlgItem(IDC_SEPARTOR)->GetWindowRect(&rectSeparator); 
         
		rectSmall.left=rectLarge.left; 
		rectSmall.top=rectLarge.top; 
		rectSmall.right=rectLarge.right; 
		rectSmall.bottom=rectSeparator.bottom; 
	} 
 
	if(str=="收缩<<") 
	{ 
		SetWindowPos(NULL,0,0,rectSmall.Width(),rectSmall.Height(), 
			SWP_NOMOVE | SWP_NOZORDER); 
	} 
	else 
	{ 
		SetWindowPos(NULL,0,0,rectLarge.Width(),rectLarge.Height(), 
			SWP_NOMOVE | SWP_NOZORDER); 
	} 
} 
/*小结:先实现“收缩”和“扩展”这个汉字的转换 
        分析Large和Small的坐标的变换 
		其中Small的底部坐标纵坐标和那个分割线的纵坐标相同, 
		可以先求出分割线的纵坐标rectSeparator 将其付给Small的底部坐标纵坐标 
		其他的坐标很容易求得和Large的相同*/