MFC为何不能添加变量

MFC为何不能添加变量,第1张

不知道你说的变量是指什么变量?为控件添加变量的话,我下面的回答希望可以帮助到您:

首先要确保你的窗口是否添加了类。添加类的方法是:

1、打开你开发的窗口

2、在你开发的窗口右键点击,d出菜单,选择"添加类"

3、输入类名(建议以C开头)和其他参数(可选),点击确定。

做完之后

如果你用的是Visual Studio的话,你可以按照下面的步骤为控件进行变量的添加:

1、打开 资源视图

2、打开你所开发的那个Dialog

3、用鼠标选中你需要添加变量的控件,然后鼠标右键,d出菜单里选择 添加变量

4、可以添加两种类型的变量:a、控件类型 b、值类型。选择类型后(默认是控件类型) 输入变量名字和控件类之后,点击确定就好了

MFC edit control 用法(总结)

MFC里面的EDIT Control控件的用法是怎么样的,1.怎么样才能赋值给EDIT Control控件并在EDIT Control控件显示出来2.怎么取得EDIT Control控件的值并传递给一个变量?希望各位大侠帮帮忙!//获得EDITCEdit* pBoxOnepBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1)//付值pBoxOne->SetWindowText( _T"FOO" )//取值CString strpBoxOne->GetWindowText(str)GetDlgItem(IDC_EDIT1)->SetWindowText( _T"FOO" )也可以//取值CString strGetDlgItem(IDC_EDIT1)->GetWindowText(str)

EditControl是在MFC对话框中最频繁的使用的控件之一

VC++2005提供EditControl的属性和控件事件 *** 作简单方便

1只允许输入数字如果设置EditControl中只能输入数字,在VC6.0中需要编写一个派生类来达到目的,而在VC++2005下只需要在属性对话框中将Number的属性值设

为True就可以了.

2获取EditControl的内容两种方法第一种,利用MFC应用程序向导生成一个基于对话框的应用程序,从资源视图中选择该Dialog窗体,利用右侧的工具箱,向Dialog内添加一个

EditControl项,声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content.

CString m_sEdit_ContentCString sUpdateData(true)s=m_sEdit_Content.GetString()MessageBox(s,_T("获取编辑框的内容"),MB_OK)s.ReleaseBuffer()

这样就取得了编辑框的内容

UpdateData(true)这句代码很重要,它的作用是将输入的数据装入EditControl对应的变量m_sEdit_Content中.由于MFC应用程序向导默认是使用Unicode库,所以MessageBox中的字符串需要用_T(),否则会出现const char[]转换LPCTSTR错误,如果不使用

Unicode库就不需要_T().

第二种方法声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.代码如下(Unicode)CString ss.GetBufferSetLength(1024)m_Edit_Content.GetWindowTextW(s.GetBuffer(),s.GetLength())MessageBox(s,_T("获取文本框的内容"),MB_OK)s.ReleaseBuffer()

如果不是Unicode下获取编辑框内容的函数就是GetWindowTextA

3将EditControl中的内容转化为整数

在限制编辑框只能数字之后,要将字符串转化为整数声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content.CString sUpdateData(true)s=m_sEdit_Content.GetString()int n=_tstoi(s)s.ReleaseBuffer()n就是所需要的整数在VC2005下字符串转换成整数需要_tstoi这个函数

4限制编辑框的输入长度声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content.在对话框初始化的地方写m_Edit_Content.SetLimitText(1)编辑框就只能输入一个字符了.

最后:要说的是GetDlgItemText不要轻易用……知道就行,如果真用,你可以试试……

SetSel(start,end)作用:

定制EDIT的所选择内容.间接地可以用于定位光标位置.

使用例子:

EXP1:设置光标

CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT1)

pEdit->SetSel(2,2)

pEdit->SetFocus()

EXP2:选择内容

CEdit* pEdit=(CEdit*)GetDlgItem(IDC_EDIT1)

pEdit->SetSel(0,2)//两个字符

说明:

如果出现光标设置失效的情况,可能是由于以下情况:因为UpdateData()的作用也会重置光标,所以用于设置光标时一定要放在UpdateData()之后.

如果用于选择内容:SetSel(0,-1)表示全选SetSel(-1,i)表示删除所有.

1.怎么在CEDIT执行回车换行显示的功能?

CEdit控件设置want return 属性 并设置Multiline属性,此时用

CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1)

pEdit->SetWindowText("第一\r\n第二\r\n第三")

将显示3行。

2。作为密码输入控件使用。

m_WndEDIT4.SetPasswordChar('*')

3。CEDIT没有AppendText功能怎么办?

int nLength = m_WndEDIT4.SendMessage(WM_GETTEXTLENGTH)

m_WndEDIT4.SetSel(nLength, nLength)

m_WndEDIT4.ReplaceSel( " abc " )

1.如果文本框和变量建立了关联直接

UpdateData(TRUE) //用于获得文本框中的内容

UpdateData(FALSE) //用于更新文本框的内容并和更新关联的变量

例如:

DDX_Text(pDX, IDC_EDIT1, m_sEdit1)//把变量m_sEdit1与IDC_EDIT1建立联系

//让文本框中显示“Hello”

m_sEdit1 = "Hello"

UpdateData(FALSE)

//获得文本框的用户输入内容

UpdateData(TRUE)//如果用户写入的是"MingFei",那么m_sEdit1的值应该是"MingFei"

if (m_sEdit1 == "MingFei")

{

AfxMessageBox("OK")

}

2.

CString str

GetDlgItemText(IDC_EDIT1, str)//获得文本框中的内容,保存在str中

SetDlgItemText(IDC_EDIT1, str)//向文本框中写入str

3.麻烦点,其实就是第二种方法

CEdit *edit=(CEdit*)GetDlgItem(IDC_EDIT1)

CString dir

edit->GetWindowText(dir)

(47) 如何限制编辑框中的准许字符

如果用户在编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指定新的创建标志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参量并决定所执行的 *** 作,用户可以确定是否修改、传送字符。下例说明了如何显示字母字符,如果字符是字母字符,则调用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 的值,这样是不行的。要修改一个字符,需要首先修改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 ))

}

枚举所有字体

LOGFONT lf

lf.lfCharSet = DEFAULT_CHARSET// Initialize the LOGFONT structure

strcpy(lf.lfFaceName,"")

CClientDC dc (this)

// Enumerate the font families

::EnumFontFamilie***((HDC) dc,&lf, (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0)

//枚举函数

int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,

LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)

{

// Create a pointer to the dialog window

CDay7Dlg* pWnd = (CDay7Dlg*) lparam

// add the font name to the list box

pWnd ->m_ctlFontList.AddString(lpelf ->elfLogFont.lfFaceName)

// Return 1 to continue font enumeration

return 1

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cciey/archive/2008/07/24/2702356.aspx

用Edit Box 显示系统实时时间:

在对话框的初始化函数OnInitDialog()中添加以下程序:

SYSTEMTIME st

GetLocalTime(&st)

CString str_temp

str_temp.Format("%u/%u/%u %u:%u:%u:%u\n", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds)

CEdit* edt = (CEdit*)GetDlgItem(IDC_EDIT_TIME)

edt->SetWindowText(str_temp)

用Edit Box 显示系统当前时间:

在对话框的初始化函数OnInitDialog()中添加以下程序:

CString str

CTime tm

tm = CTime::GetCurrentTime()//把获得的当前时间保存到变量tm中

str = tm.Format("%Y年%m月%d日 %X")

this->GetDlgItem(IDC_EDIT1)->SetWindowText(str)

用Edit Box 只接受数字输入:

在对话框初始化函数中添加以下代码:

CEdit* m_edit = (CEdit*)GetDlgItem(IDC_EDIT1)

long wl = GetWindowLong(m_edit->m_hWnd, GWL_STYLE) //获得Edit Box的窗口风格

SetWindowLong(m_edit->m_hWnd, GWL_STYLE, wl | ES_NUMBER)//设置Edit Box新风格

自定义Edit Box的可输入内容:

重载对话框的PreTranslateMessage函数,并且添加以下代码:

BOOL CLangziDlg::PreTranslateMessage(MSG* pMsg)

{

CEdit* m_edit = (CEdit*)GetDlgItem(IDC_EDIT1)

if((pMsg->hwnd == m_edit->m_hwnd) &&(pMsg->message == WM_CHAR))

{

if(65 != pMsg->wParam) //只允许输入字母A(A的ascll码是65)

return TRUE

}

}

*** 作步骤:(1)首先在资源视图(Resource View),为新添加的对话框添加类。 提示:在对话框空白处点击鼠标右键即可 *** 作。(2)在类视图中(class View),找刚才为对话框添加的类的名称, 点击该名称鼠标右键d出菜单中就有Add member variables 项,选择后d出添加变量的对话框。(3)在d出的添加变量对话框中添加需要的变量即可。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11502530.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存