如何处理控件中的Returnkey(VK_RETURN)CEdit?该CEdit控制父到CDialog.
MFC中CEdit控件中包含的文本字符串的最大长度是多少?在任何地方记录角色30001之后尝试添加角色时,我会发出一声嘟嘟声?我可以在CEdit中显示更长的文本吗?我应该使用另一个控件吗?
正如"Windows程序员"在下面所说,当用户键入时,文本长度限制与我们使用SetWindowText以编程方式设置文本时不一样.在任何地方都没有提到以编程方式设置文本的限制.用户输入的默认文本lentgth限制是错误的.(见下面我自己的帖子).
我猜测在调用pEdit-> SetLimitText(0)之后,编程和用户输入文本长度的限制都是7FFFFFFE字节.我对吗?
在vista中,当将超过40000个字符的文本粘贴到CEdit中时,它变得没有响应.如果我先前调用了SetLimitText(100000)并不重要.
当我使用Tab键或箭头键移动到对话框上的CEdit控件时,控件中的所有文本都被选中.这种行为导致我出现问题,如果控件只将光标放在文本的开头(或结尾)并且没有选择任何内容,我会更喜欢它.有没有一种简单的方法可以做到这一点(例如我可以设置的控件的属性)?
我是ATL的新人.所以请原谅我提出这个问题.
问题描述: 一个CEdit控件被添加到ATL对话框类中.它附加在对话框初始化函数中.
//Define the edit control
ATLControls::CEdit m_txtInput;
//In the OnInitDialog function
m_txtInput.Attach(GetDlgItem(IDC_INPUT_LINE));
m_txtInput.SetWindowText(_T("New directory"));
//In the public memeber function of the dialog GetInput()
//I have tried three kinds of method to get the text. But all of them are throw an
//assert exception, IsWindow() failed.
//1.
GetDlgItemText(IDC_INPUT_LINE, input);
//2.
ZeroMemory(m_lptstrInput, MAX_PATH);
m_txtInput.GetLine(0, m_lptstrInput, MAX_PATH);
//3.
BSTR input;
m_txtInput.GetWindowText(input);
Run Code Online (Sandbox Code Playgroud)
这是一个关于如何从CEdit获取文本但不起作用的主题.
为什么CEdit控件可以使用函数SetWindowText()设置文本但不能通过函数GetWindowText()获取文本?这让我很困惑.非常感谢,如果有人可以帮我解释一下.
伙计们,有人可以简要介绍一下如何在运行时更改CEdit控件的背景颜色吗?如果字段长度为零,我希望能够将背景更改为红色,否则为正常白色.
我正在使用 MFC 做一个应用程序。我刚刚创建了一个派生自 CEdit 的类,因此我可以拦截 OnChar() 并进行数据验证。如何用我制作的派生控件替换应用程序中的编辑控件?
我有一个CEdit文本框,它是属性窗格的一部分,只允许数值(正整数).当人们输入非数字值时,该框工作正常,但当他们删除框中的值时会弹出一个对话框,说:"请输入一个正整数."
情况如下:
1.我在框中有一个数字(比如20).
我删除了这个号码.
3.我收到错误对话框.
有谁能告诉我如何拦截这个事件并在那里放一个默认值?
这是我的属性窗格的样子:
const int DEFAULT_VALUE = 20;
class MyPropertyPane:public CPropertyPane
{
//....
private:
CEdit m_NumericBox;
int m_value;
//....
public:
afx_msg void OnEnChangeNumericBox();
//....
}
void MyPropertyPane::MyPropertyPane()
{
// Set a default value
m_value = DEFAULT_VALUE;
}
//....
void MyPropertyPane::DoDataExchange(CDataExchange* pDX)
{
DDX_Control(pDX, IDC_NUMERIC_BOX, m_NumericBox);
// this sets the displayed value to 20
DDX_Text(pDX, IDC_NUMERIC_BOX, m_value);
}
//....
void MyPropertyPane::OnEnChangeNumericBox()
{
// Somebody deleted the value in the box and I got an event
// saying …Run Code Online (Sandbox Code Playgroud) 我在MFC中有一个带有a CSpinButtonCtrl和附加伙伴(CEdit)的对话框.他们正常工作时的旋转控制的最大值低于1000,但如果是更高的,在价值CEdit被钳万台当值是1000或更高(它被钳位至4,而不是4345,例如).
BEGIN
EDITTEXT IDC_EDIT_1,274,42,40,14,ES_AUTOHSCROLL | ES_NUMBER
CONTROL "",IDC_SPIN_1,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS,313,42,11,14
END
Run Code Online (Sandbox Code Playgroud)
范围以编程方式设置:
const int max_value = 5000;
auto spin = (CSpinButtonCtrl*)GetDlgItem(IDC_SPIN_1);
spin->SetRange(1, max_value);
Run Code Online (Sandbox Code Playgroud)
知道发生了什么事吗?
我有一个CEdit控件,并将其设置为资源中的多行。
用户可以输入文本,如果它对于控件来说太宽,它将自动换行。伟大的。
现在,我知道我可以传入一个字符串并包含新行字符,例如\n使其显示多行文本。
但是如果我只有一行文本,那太长了,它就无法自动换行。:( 那么我该如何处理呢?
我有一些单选按钮,决定了给CEdit控件的输入类型.按照设计,我的CEdit控件接受数字和字符.
有没有办法只在用户点击提供的单选按钮时才将此输入限制为仅限数字?此外,当用户点击另一个选项(即字母数字模式)时,是否可以切换回来?
我设置我的CEdit控件以使用Visual C++的GUI接受字母数字字符(即右键单击控件 - >属性 - >"样式"选项卡 - >选择"数字").
一个用例示例:
CEdit控件一起考虑显示.此时我想将CEdit控件的输入限制为仅数字.同样,在此之后,如果用户再次单击字母数字单选按钮,我想删除该限制.
感谢您的回答和评论。我选择了我选择的答案,因为它允许我继续使用,CEdit只需对代码进行一些小的更改。然而,所考虑的解决方案CMFCMaskedEdit在测试时似乎也有效。如果您选择使用该解决方案,请确保在初始化时为对象应用正确的功能,例如SetValidChars等!:) 再次谢谢大家
我正在使用 Visual Studio Professional 2017 C++ 和 MFC
CEdit我的 MFC 项目中有一个对象,该对象EDITTEXT在我的.rc文件中也有一个控件。
该CEdit对象将由输入关键字的用户进行编辑,我将使用该关键字执行某些操作,即查找包含该关键字的文件。
当然,由于我的任务,我不能允许以下chars: \ / : * ? " < > |,因为这些chars 不允许出现在文件或文件夹名称中。
我该怎么做才能阻止用户将这些字符输入到CEditBox. 实际上,char我只需要:A-Z、a-z、0-9和_。
另一种规格:不,regex请!理想情况下,答案将使用我可能忽略的Control(我看这里)或function(我看这里)。
如果没有解决方案,我会回到这个:
char我将检查用户输入的文本中是否存在这些内容。如果没有,那就太棒了,没什么可担心的!如果是,那么我将返回一个错误:)
先感谢您 !:D