我有一个edit control应该只接受带符号的十进制数字 - 就像-123.456.此外,它应该是区域设置,因为小数分隔符对于每个国家都不相同 - 使用美国点,而在欧洲它是逗号等等.
到目前为止,我已经习惯subclassing了这个.这是我实现的逻辑subclassing,通过伪代码表示:
if ( ( character is not a [ digit,separator, or CTRL/Shift... ] OR
( char is separator and we already have one ) )
{
discard the character;
}
Run Code Online (Sandbox Code Playgroud)
首先,我创建了一个帮助函数,确定char数组是否已经有一个小数分隔符,如下所示:
bool HasDecimalSeparator( wchar_t *test )
{
// get the decimal separator
wchar_t szBuffer[5];
GetLocaleInfo ( LOCALE_USER_DEFAULT,
LOCALE_SDECIMAL,
szBuffer,
sizeof(szBuffer) / sizeof(szBuffer[0] ) );
bool p = false; // text …Run Code Online (Sandbox Code Playgroud) 如何在本机Windows操作系统编辑控件的上下文菜单中禁用这3个标准剪切/复制/粘贴命令?
我还需要禁用等效的剪贴板相关命令,如CTRL + C/CTRL + V.
是否有一种特殊的编辑控件样式或其他任何我们可以用一个简单设置禁用所有复制/粘贴操作的东西?
我想跟踪单击左键单击编辑控件的事件.我重写PretranslateMessage函数如下:
BOOL CMyClass::PreTranslateMessage(Msg* pMsg)
{
switch(pMsg->message)
case WM_LBUTTONDOWN:
{
CWnd* pWnd = GetFocus();
if (pWnd->GetDlgCtrlID == MY_EDIT_CTRL_ID)
{
//Do some thing
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是当我点击编辑控件时,所有其他控件都被禁用(例如按钮不响应点击等)
我该如何解决这个问题?或者如何在编辑框中跟踪点击通知?
我在对话框中有编辑控件,该对话框会检查输入的有效性。
如果输入无效,我应该通过更改编辑控件的背景颜色来指示有效性,否则我不应该执行任何操作。
我正在检查处理程序中的输入EN_CHANGE,如果输入无效,我会将编辑控件的句柄存储在向量中。最后我打电话给InvalidateRect( (HWND)lParam, NULL, TRUE );编辑控件,以便可以用适当的颜色重新绘制。
要重新绘制编辑控件,我的处理WM_CTLCOLOREDIT方式如下:
case WM_CTLCOLOREDIT:
{
bool IsInvalid = false; // does this edit control hold invalid text ?
// vector InvalidInput contains handles of edit controls
// with invalid input, so we check if our window is stored there
for( vector<HWND>::size_type i = 0;
!IsInvalid && ( i < InvalidInput.size() ); i++ )
{
if( InvalidInput[i] == (HWND)lParam )
IsInvalid = true;
}
// if input …Run Code Online (Sandbox Code Playgroud) https://en.wikipedia.org/wiki/International_Bank_Account_Number#Practicalities
当以电子方式传输时,IBAN不应包含空格:打印时,它由以单个空格分隔的四个字符组表示,最后一组具有可变长度,如下例所示:
典型的IBAN如下所示:( GR16 0110 1250 0000 0001 2300 695取自上面的链接).
我想让用户更容易输入IBAN号码.目前我用a TDBEdit来显示IBAN号码,它作为字符存储(没有空格)在数据库中.
我知道有可能使用格式化数字,但TNumericField.DisplayFormat也有TMaskEdit,但两者都不是非常有用,因为IBAN不是一个数字,并且在不同的国家有不同的长度.
如何在DB控件中编辑四个字符组中的IBAN编号?
PS:我不是要求实际的IBAN验证,因为我已经弄明白了.
是否可以在编辑控件上设置扩展样式(简单编辑,而不是丰富编辑)?例如我想将扩展样式设置为WS_EX_ZOOMABLE | WS_EX_ALLOWEOL_ALL. 控件的创建如下:
HWND hEdit = CreateWindowExW(
ES_EX_ZOOMABLE | ES_EX_ALLOWEOL_ALL,
L"EDIT",
L"",
WS_BORDER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
0, 0, 100, 100,
hWndMain, (HMENU)ID_EDIT, hInstance, NULL
);
Run Code Online (Sandbox Code Playgroud)
问题是所有扩展样式都不起作用。是EOL静止的CR LF并且控件不可缩放。
editcontrol ×7
winapi ×5
c++ ×4
c ×1
clipboard ×1
contextmenu ×1
delphi ×1
delphi-xe3 ×1
iban ×1
locale ×1
mfc ×1
subclassing ×1