孙鑫VC++深入详解:Lesson7 Part2---访问静态文本控件的七种方法

静态文本控件要能响应鼠标点击消息,两个特殊的步骤:

第一步:改变它的ID

第二部:勾选Notify



方式一 GetDlgItem()->GetWindowText();
方式二 GetDlgItemText();SetDlgItemText();
方式三 GetDlgItemInt(); SetDlgItemInt();
方式四 将三个EDIT编辑框关联到当前CTestDlg类的3个成员变量,是普通的内置数据类型如int的成员变量
方式五 将三个EDIT编辑框关联到当前CTestDlg类的控件类型的成员变量,如CEdit类型的控件
方式六 向控件发送SendMessage()的方式来获取或者设置控件窗口的文本
方式七 SendDlgItemMessage()

//--


方式一 GetDlgItem()->GetWindowText();
/*
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);    
num1 = atoi(ch1);
num2  =atoi(ch2);
num3 = num1+num2;
itoa(num3,ch3,10);
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
*/


方式二 GetDlgItemText();SetDlgItemText();
/*
GetDlgItemText(IDC_EDIT1,ch1,10);
GetDlgItemText(IDC_EDIT2,ch2,10);
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
SetDlgItemText(IDC_EDIT3,ch3);
*/


方式三 GetDlgItemInt(); SetDlgItemInt();
/*
num1 = GetDlgItemInt(IDC_EDIT1);
num2 = GetDlgItemInt(IDC_EDIT2);
num3 = num1 + num2;
SetDlgItemInt(IDC_EDIT3,num3);
    */


 方式四 将三个EDIT编辑框关联到当前CTestDlg类的3个成员变量,是普通的内置数据类型如int的成员变量
    // DDX_TEXT函数将EDIT1的内容转换到m_num1

// 让UpdateData()去调用DoDataExchange(), true 就是获取对话框中输入的数据并赋予变量
UpdateData(true); m_num1
m_num3 = m_num1 + m_num2;
UpdateData(false); //用变量m_mum3的值去初始化对话框IDC_EDIT3

---  快捷键 Ctrl + M 调出MFC ClassWizard, 这是个集成的快捷设计工具

--- 


方式五 将三个EDIT编辑框关联到当前CTestDlg类的控件类型的成员变量,如CEdit类型的控件

        m_edit1.GetWindowText(ch1,10);
m_edit2.GetWindowText(ch2,10);
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
m_edit3.SetWindowText(ch3);

---


方式六 向控件发送SendMessage()的方式来获取或者设置控件窗口的文本
 注意: 要在MSDN中查看WM_GETTEXT和WM_SETTEXT,才能看到SendMessage()的这种参数用法,单纯的查看SendMessage()是看不到这种参数传入wParam和lParam的用法的.
 是谁给谁发送啊? 是点击的那个ADD按钮给控件窗口发送?
 要获得窗口文本用WM_GETTEXT,设置则用WM_SETTEXT
点击按钮是向编辑框EDIT1发送消息要求获得其文本,保存到ch1
/*
WM_GETTEXT
An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller. 

 To send this message, call the SendMessage function with the following parameters. 
 
SendMessage( 
(HWND) hWnd,              // handle to destination window 
WM_GETTEXT,               // message to send
(WPARAM) wParam,          // number of characters to copy
(LPARAM) lParam           // text buffer这时候这里居然是buffer了,这个参数真实多变....
);


  WM_SETTEXT
  An application sends a WM_SETTEXT message to set the text of a window. 
  
To send this message, call the SendMessage function with the following parameters. 

 SendMessage( 
 (HWND) hWnd,              // handle to destination window 
 WM_SETTEXT,               // message to send
 (WPARAM) wParam,          // not used; must be zero
 (LPARAM) lParam           // window-text string (LPCTSTR)
 );

*/
//调用SDK函数,要加双冒号::,最后要强制转换,有点疑惑,ch1是char,lparam是LPARAM要转换

::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1); 
::SendMessage(GetDlgItem(IDC_EDIT2)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch2); 
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);
/* 
(1)或者用IDC_EDIT1关联的成员控件变量m_edit1去获得IDC_EDIT1的窗口句柄
    ::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
(2) 或者直接调用IDC_EDIT1的SendMessage(),那是自己发给自己?看MSDN解释:"An application sends a WM_GETTEXT message,.....call SendMessage() " 没有说是谁call
GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
(3) 直接用关联的控件m_edit1,控件也是窗口,调用SendMessage
      m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1)
*/



 方式七 SendDlgItemMessage()
SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);

//---

// TestDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Mybole.h"
#include "TestDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/
// CTestDlg dialog

//构造函数,用基类CDialog构造函数传入IDD,这个IDD就是IDD_DIALOG1,IDD在TestDlg.h中定义的.
CTestDlg::CTestDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestDlg)
	m_num1 = 0;
	m_num2 = 0;
	m_num3 = 0;
	//}}AFX_DATA_INIT

	m_bIsCreate = false;
}


void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CTestDlg)
	DDX_Control(pDX, IDC_EDIT3, m_edit3);
	DDX_Control(pDX, IDC_EDIT2, m_edit2);
	DDX_Control(pDX, IDC_EDIT1, m_edit1);
	DDX_Text(pDX, IDC_EDIT1, m_num1);
	DDX_Text(pDX, IDC_EDIT2, m_num2);
	DDX_Text(pDX, IDC_EDIT3, m_num3);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
	//{{AFX_MSG_MAP(CTestDlg)
	ON_BN_CLICKED(ID_BTN_ADD, OnBtnAdd)
	ON_BN_CLICKED(IDC_NUMBER1, OnNumber1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/
// CTestDlg message handlers

void CTestDlg::OnBtnAdd() 
{
	// TODO: Add your control notification handler code here

//--- 创建按钮
/*
	static bool m_bIsCreate = false;
	if(m_bIsCreate==false)
	{
		m_btn.Create("微信",BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,CRect(0,0,100,100),this,123);
		m_bIsCreate = true;

	}
	else
	{
		  m_btn.DestroyWindow();
		  m_bIsCreate = false;
	}
*/

//---利用m_btn对象中的成员m_hWnd来判断按钮是否创建.
	/*
	  if(m_btn.m_hWnd==NULL)
		  m_btn.Create("微信",BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD,CRect(0,0,100,100),this,123);	  
	   else  m_btn.DestroyWindow();
	   */


	int num1,num2,num3;
	char ch1[10],ch2[10],ch3[10];

//------ 方式一 GetDlgItem()->GetWindowText();
	/*
	GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);
	GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);    
	num1 = atoi(ch1);
	num2  =atoi(ch2);
	num3 = num1+num2;
	itoa(num3,ch3,10);
	GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
	*/

//------ 方式二 GetDlgItemText();SetDlgItemText();	
	/*
	GetDlgItemText(IDC_EDIT1,ch1,10);
	GetDlgItemText(IDC_EDIT2,ch2,10);
	num1 = atoi(ch1);
	num2 = atoi(ch2);
	num3 = num1 + num2;
	itoa(num3,ch3,10);
	SetDlgItemText(IDC_EDIT3,ch3);	
	*/

//------ 方式三 GetDlgItemInt(); SetDlgItemInt();
	/*
	num1 = GetDlgItemInt(IDC_EDIT1);
	num2 = GetDlgItemInt(IDC_EDIT2);
	num3 = num1 + num2;
	SetDlgItemInt(IDC_EDIT3,num3);
    */

//------ 方式四 将三个EDIT编辑框关联到当前CTestDlg类的3个成员变量,是普通的内置数据类型如int的成员变量
	     // DDX_TEXT函数将EDIT1的内容转换到m_num1
	/*
	UpdateData(true); // 让UpdateData()去调用DoDataExchange(), true 就是获取对话框中输入的数据并赋予变量m_num1
	m_num3 = m_num1 + m_num2;	
	UpdateData(false); //用变量m_mum3的值去初始化对话框IDC_EDIT3
	*/

//------ 方式五 将三个EDIT编辑框关联到当前CTestDlg类的控件类型的成员变量,如CEdit类型的控件
	 /*
	    m_edit1.GetWindowText(ch1,10);
		m_edit2.GetWindowText(ch2,10);
		num1 = atoi(ch1);
		num2 = atoi(ch2);
		num3 = num1 + num2;
		itoa(num3,ch3,10);
		m_edit3.SetWindowText(ch3);
		*/

	
//------ 方式六 向控件发送SendMessage()的方式来获取或者设置控件窗口的文本
	// 注意: 要在MSDN中查看WM_GETTEXT和WM_SETTEXT,才能看到SendMessage()的这种参数用法,单纯的查看SendMessage()是看不到这种参数传入wParam和lParam的用法的.
	     // 是谁给谁发送啊? 是点击的那个ADD按钮给控件窗口发送?
         // 要获得窗口文本用WM_GETTEXT,设置则用WM_SETTEXT
//点击按钮是向编辑框EDIT1发送消息要求获得其文本,保存到ch1
	/*
	WM_GETTEXT
	An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller. 
	
	  To send this message, call the SendMessage function with the following parameters. 
	  
		SendMessage( 
		(HWND) hWnd,              // handle to destination window 
		WM_GETTEXT,               // message to send
		(WPARAM) wParam,          // number of characters to copy
		(LPARAM) lParam           // text buffer这时候这里居然是buffer了,这个参数真实多变....
		);

  WM_SETTEXT
  An application sends a WM_SETTEXT message to set the text of a window. 
  
	To send this message, call the SendMessage function with the following parameters. 
	
	  SendMessage( 
	  (HWND) hWnd,              // handle to destination window 
	  WM_SETTEXT,               // message to send
	  (WPARAM) wParam,          // not used; must be zero
	  (LPARAM) lParam           // window-text string (LPCTSTR)
	  );
	  Parameters
		
	 */
//调用SDK函数,要加双冒号::,最后要强制转换,有点疑惑,ch1是char,lparam是LPARAM要转换
::SendMessage(GetDlgItem(IDC_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1); 
::SendMessage(GetDlgItem(IDC_EDIT2)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch2); 
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
m_edit3.SendMessage(WM_SETTEXT,0,(LPARAM)ch3);
/* 
(1)或者用IDC_EDIT1关联的成员控件变量m_edit1去获得IDC_EDIT1的窗口句柄
    ::SendMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);
(2) 或者直接调用IDC_EDIT1的SendMessage(),那是自己发给自己?看MSDN解释:"An application sends a WM_GETTEXT message,.....call SendMessage() " 没有说是谁call
GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,(LPARAM)ch1);
(3) 直接用关联的控件m_edit1,控件也是窗口,调用SendMessage
      m_edit1.SendMessage(WM_GETTEXT,10,(LPARAM)ch1)
*/


//------ 方式七 SendDlgItemMessage()
SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,(LPARAM)ch1);
SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,(LPARAM)ch2);
num1 = atoi(ch1);
num2 = atoi(ch2);
num3 = num1 + num2;
itoa(num3,ch3,10);
SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,(LPARAM)ch3);


}

// -----静态文本的访问
void CTestDlg::OnNumber1() 
{
	// TODO: Add your control notification handler code here
   CString str;
   if(GetDlgItem(IDC_NUMBER1)->GetWindowText(str),str="Number1:")
   {
	   GetDlgItem(IDC_NUMBER1)->SetWindowText("数值1:");
   }
   else
   {
		GetDlgItem(IDC_NUMBER1)->SetWindowText("Number1:");
   }
	
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
孙鑫vc是一种特殊的混合编程语言,它结合了C语言和Verilog语言的特点。在深入详解孙鑫vc代码之前,我们先了解一下它的一些特性。 首先,孙鑫vc具有高度的可定制性。用户可以根据自己的需求选择C语言和Verilog语言中的特性来编写代码。这种灵活性使得孙鑫vc可以适用于不同的应用领域。 其次,孙鑫vc支持并行计算。它提供了一种简单而有效的方式来利用硬件资源进行并行计算,提高程序的执行效率。 另外,孙鑫vc还具有强大的调试功能。它能够在运行时对代码进行监和调试,帮助开发者快速定位问题并进行修复。 深入详解孙鑫vc代码包括以下几个方面: 首先,我们可以从代码的结构和组织方式入手。孙鑫vc代码一般由多个模块组成,每个模块包含了各自的功能和接口。 其次,我们需要了解代码中使用的变量和数据类型。在孙鑫vc中,可以使用C语言和Verilog语言中的数据类型,如整型、浮点型等。了解这些数据类型的使用方法和限制对理解代码非常重要。 然后,我们需要分析代码中的制流和算法。这包括了代码中的条件语句、循环语句等,以及算法的实现细节。通过对制流和算法的分析,我们可以更好地理解代码的逻辑和实现原理。 最后,我们还需要关注代码中的接口和数据传输方式。在孙鑫vc中,模块之间通过接口进行数据的传递和交互。了解接口的定义和使用方式对于理解代码的功能和模块之间的关系非常重要。 综上所述,深入详解孙鑫vc代码需要从代码的结构和组织方式、变量和数据类型、制流和算法、接口和数据传输方式等多个方面进行分析和理解。通过对这些方面的研究,我们可以更好地理解孙鑫vc代码,并且能够对代码进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值