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的相同*/