模态对话框与非模态对话框

本文介绍了如何创建模态和非模态对话框,并着重讲解了在对话框中处理用户输入的方法,包括使用GetDlgItemText获取编辑框内容、SetDlgItemText更新显示、设置焦点和编辑框内容全选等操作。同时提到了非模态对话框中TAB键的使用和输入类型的限制,如设置编辑框仅接受数字输入。

创建对话框 

case ID_DIALOG_TEXT:
	DialogBox(hInst, MAKEINTRESOURCE(IDD_TEXTBOX), hWnd,Textset);
	break;            //创建模态对话框

case ID_DIALOG_TCOLOR:
	dHwnd = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG_TCOLOR), hWnd, TextColor);
        ShowWindow(dHwnd,SW_SHOW);            //创建非模态对话框
	break;

Textset 函数

其中

GetDlgItemText(hDlg, IDC_EDITTEXT,szDialogtext, 64); 函数可从对话框的编辑框里取出用户填写的字符串到szDialogtext中,64为其长度。

wcscpy_s(szBuffer,szDialogtext); 用于宽字符的赋值。

SetDlgItemText(hDlg, IDC_EDITTEXT, szBuffer); 在编辑框里显示szBuffer。

SetFocus(GetDlgItem(hDlg, IDC_EDITTEXT)); 设置焦点到指定编辑框IDC_EDITTEXT。

SendDlgItemMessage(hDlg, IDC_EDITTEXT,EM_SETSEL, 0, -1L);  编辑框内容全选。

 

INT_PTR CALLBACK Textset(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	TCHAR szDialogtext[64] = TEXT(" ");
	
	switch (message)
	{
	
	case WM_INITDIALOG:
		
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDOK:
			GetDlgItemText(hDlg, IDC_EDITTEXT,
				szDialogtext, 64);
				wcscpy_s(szBuffer,szDialogtext);
				InvalidateRect(temHwnd, NULL, TRUE);
				
		case IDCANCEL:
			EndDialog(hDlg, wParam);
			return TRUE;
		}
		break;					//break需加上,否则会在上switch内

	case WM_SHOWWINDOW:
		SetDlgItemText(hDlg, IDC_EDITTEXT, szBuffer);
		SetFocus(GetDlgItem(hDlg, IDC_EDITTEXT));
		SendDlgItemMessage(hDlg, IDC_EDITTEXT,EM_SETSEL, 0, -1L);		//全选
		break;
	
	}
	return (INT_PTR)FALSE;
}

Text Color 函数

需要注意的是,非模态对话框的TAB键使用需要在消息处理额外设置。

 

 

while (GetMessage(&msg, nullptr, 0, 0))
    {
        if (!IsDialogMessage(dHwnd, &msg)) {
            if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }
 

INT_PTR CALLBACK TextColor(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
	case WM_INITDIALOG:
		return (INT_PTR)TRUE;

	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDAPPLY:
			rNum = GetDlgItemInt(hDlg, IDC_EDITRED,NULL, FALSE);
			gNum = GetDlgItemInt(hDlg, IDC_EDITGREEN, NULL, FALSE);
			bNum = GetDlgItemInt(hDlg, IDC_EDITBLUE, NULL, FALSE);
			InvalidateRect(temHwnd, NULL, TRUE);
			return TRUE;

		case IDCANCEL:
			DestroyWindow(hDlg);
			return TRUE;
		}
		break;

	case WM_SHOWWINDOW:
		SetFocus(GetDlgItem(hDlg, IDC_EDITRED));
		SetDlgItemInt(hDlg, IDC_EDITRED, rNum, FALSE);
		SetDlgItemInt(hDlg, IDC_EDITGREEN, gNum, FALSE);
		SetDlgItemInt(hDlg, IDC_EDITBLUE, bNum, FALSE);
		
		SendDlgItemMessage(hDlg, IDC_EDITRED, EM_SETSEL, 0, -1L);
		SendDlgItemMessage(hDlg, IDC_EDITGREEN, EM_SETSEL, 0, -1L);
		SendDlgItemMessage(hDlg, IDC_EDITBLUE, EM_SETSEL, 0, -1L);
		
		break;
	}

	return (INT_PTR)FALSE;
}

输入框可设置指定输入类型,如只输入数字,由EDIT框的properties中找到Number选项,选为TRUE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值