清泛IT社区

标题: CreateWindow()动态创建一个EditBox [打印本页]

作者: zqp2013    时间: 2014-12-26 09:42
标题: CreateWindow()动态创建一个EditBox
本帖最后由 zqp2013 于 2015-1-4 16:21 编辑

在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);
}


这样,文本框中有输入后,消息框便会提示其输入的内容。

另外,如何设置输入框焦点,请参照:http://bbs.tsingfun.com/thread-3-1-1.html





欢迎光临 清泛IT社区 (https://bbs.tsingfun.com/) Powered by Discuz! X3.3