CreateWindow()动态创建一个EditBox
清泛原创
在Win32代码或MFC代码中动态创建一个EditBox:
在OnInitDialog()函数中:
// 创建EditBox
HWND m_wndEdit = CreateWindow(_T("EDIT"), 0, WS_CHILD | WS_VISIBLE | ES_WANTRETURN,
70, 4, 60, 16, m_hWnd, 0, 0, 0);
// 显示
::ShowWindow(m_wndEdit, SW_SHOW);
常见错误解决思路:
1.创建失败,不显示输入框等。DWORD errno = GetLastError() 查看错误代码。
2.不可在类的构造函数中创建Edit,因为此时主窗口还没有被创建出来,导致出现“Cannot create a top-level child window”错误。
-----------------------------------------------------------------------------------------
创建好了EditBox,需要处理其输入事件,如下:
先给它设置一个ID(可以在resource.h中指定)
m_wndEdit = CreateWindow(_T("EDIT"), 0, WS_CHILD | WS_VISIBLE | ES_WANTRETURN,
70, 4, 60, 16, m_hWnd, (HMENU)IDC_EDIT_SEARCH, (HINSTANCE)GetWindowLong(m_hWnd, GWL_HINSTANCE), 0);
//::SetWindowLong(m_wndEdit, GWL_ID, IDC_EDIT_SEARCH); //效果和上面一样
BEGIN_MESSAGE_MAP(CMainDlg, CDialogEx)
...
ON_EN_CHANGE(IDC_EDIT_SEARCH, OnSearchEditCommand)
END_MESSAGE_MAP()
void CMainDlg::OnSearchEditCommand()
{
CString strSearch;
GetDlgItemText(IDC_EDIT_SEARCH, strSearch);
AfxMessageBox(strSearch);
}
这样,文本框中有输入后,消息框便会提示其输入的内容。
另外,如何设置输入框焦点,请参照:https://www.tsingfun.com/it/cpp/1538.html
在OnInitDialog()函数中:
// 创建EditBox
HWND m_wndEdit = CreateWindow(_T("EDIT"), 0, WS_CHILD | WS_VISIBLE | ES_WANTRETURN,
70, 4, 60, 16, m_hWnd, 0, 0, 0);
// 显示
::ShowWindow(m_wndEdit, SW_SHOW);
常见错误解决思路:
1.创建失败,不显示输入框等。DWORD errno = GetLastError() 查看错误代码。
2.不可在类的构造函数中创建Edit,因为此时主窗口还没有被创建出来,导致出现“Cannot create a top-level child window”错误。
-----------------------------------------------------------------------------------------
创建好了EditBox,需要处理其输入事件,如下:
先给它设置一个ID(可以在resource.h中指定)
m_wndEdit = CreateWindow(_T("EDIT"), 0, WS_CHILD | WS_VISIBLE | ES_WANTRETURN,
70, 4, 60, 16, m_hWnd, (HMENU)IDC_EDIT_SEARCH, (HINSTANCE)GetWindowLong(m_hWnd, GWL_HINSTANCE), 0);
//::SetWindowLong(m_wndEdit, GWL_ID, IDC_EDIT_SEARCH); //效果和上面一样
BEGIN_MESSAGE_MAP(CMainDlg, CDialogEx)
...
ON_EN_CHANGE(IDC_EDIT_SEARCH, OnSearchEditCommand)
END_MESSAGE_MAP()
void CMainDlg::OnSearchEditCommand()
{
CString strSearch;
GetDlgItemText(IDC_EDIT_SEARCH, strSearch);
AfxMessageBox(strSearch);
}
这样,文本框中有输入后,消息框便会提示其输入的内容。
另外,如何设置输入框焦点,请参照:https://www.tsingfun.com/it/cpp/1538.html
上一篇:关于 __VA_ARGS__ 宽字符版本的问题
下一篇:OnInitDialog()中SetFocus()设置焦点不起作用解决方法