1. 一般情况,当按回车键 会触发default按键,而一般来讲是 确定 按钮 ,此时会程序会退出,原因是 确定 按钮 的Defalut Button属性 设为true,过程中调用了基类的OnOK函数:

2. 在新建的Dialog类中,增加 Windows 消息处理INITDIALOG,但是不太一样的是 要在重写里面添加

3. 用来转移焦点的Edit control控件的属性 Multiline 设为True

4.双击 资源视图 dialog的 确定 按钮 实现一个OnBnClickedOK() 响应函数。相关代码:
WNDPROC prevProc;//新建一个窗口过程类型
LRESULT CALLBACK WinTstProc(
HWND hwnd, //handle to window
UINT uMsg, //message identifier
WPARAM wParam, //first message parameter
LPARAM lParam //second message parameter
)//窗口过程函数原型
{
if(uMsg == WM_CHAR && wParam == 0x0d)//如果是回车键,
{
//把编辑焦点传到下一个控件
//本函数是全局函数,只能使用平台SDK来进行
//::SetFocus(::GetNextWindow(hwnd,GW_HWNDNEXT));//方式1,GW_HWNDNEXT Returns a handle to the window below the given window
//::SetFocus(::GetWindow(hwnd,GW_HWNDNEXT));//方式2,使用平台GetWindow
::GetNextDlgTabItem(::GetParent(hwnd)/*获取对话框句柄*/,hwnd,FALSE);//需要Edit control 属性Tapstop 为True
::SetFocus(::GetNextDlgTabItem(::GetParent(hwnd),hwnd,FALSE));
}
else
{
//让先前的窗口去处理
return prevProc(hwnd,uMsg,wParam,lParam);
}
}
BOOL CtestDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
//要改变编辑框的窗口过程,需要在MainFrame OnCreate执行之后,所以要在OnInitDialog 这里进行
//第一个参数是窗口句柄, 中间是索引值参考MSDN进行设置,最后一个参数是窗口过程函数名。
prevProc = (WNDPROC)SetWindowLong(GetDlgItem(IDC_EDIT1)->m_hWnd,GWL_WNDPROC,(LONG)WinTstProc);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
MSDN 文件 链接:https://pan.baidu.com/s/1UPpu61qQMQGk4kLjYl5WbQ
提取码:a620
3175




被折叠的 条评论
为什么被折叠?



