// 普通窗口、非模式对话框: int DefaultMainWinProc (hDlg, message, wParam, lParam); // 模式对话框: int DefaultDialogProc (hDlg, message, wParam, lParam); // 控件: int DefaultControlProc (hCtrl, message, wParam, lParam);
int AppDefaultWindowProc (HWND hDlg, int message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case MSG_KEYDOWN:
{
// 获取当前处于焦点状态的子控件
HWND hCurFocus = GetFocusChild(hDlg);
// 如果当前处于焦点状态的子控件要求处理
// 所有的按键响应消息则不退出处理
if ( (hCurFocus) && (SendMessage(hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTALLKEYS) )
break;
switch (wParam)
{
// Enter 键响应
case SCANCODE_KEYPADENTER:
case SCANCODE_ENTER:
{
HWND hDef;
// 如果当前焦点控件要求处理Enter 键则不处理
if ( (hCurFocus) && (SendMessage(hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTENTER) )
break;
// 如果当前处于焦点的不是默认按钮则不处理
if ( SendMessage(hCurFocus, MSG_GETDLGCODE, 0L, 0L) & DLGC_PUSHBUTTON )
break;
// 向默认按钮发送被按下消息
hDef = GetDlgDefPushButton (hDlg);
if (hDef)
{
SendMessage (hDlg, MSG_COMMAND,
GetDlgCtrlID(hDef), 0L);
return 0;
}
break;
}
// Esc 键响应
case SCANCODE_ESCAPE:
{
SendMessage (hDlg, MSG_COMMAND, IDCANCEL, 0L);
return 0;
}
// Tab 键响应
case SCANCODE_TAB:
{
HWND hNewFocus;
// 如果当前焦点控件要求处理tab 键则不处理
if ( (hCurFocus) && (SendMessage (hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTTAB) )
break;
// shift+tab: 向前遍历
if (lParam & KS_SHIFT)
hNewFocus = GetNextDlgTabItem (hDlg, hCurFocus, TRUE);
// tab: 向后遍历
else
hNewFocus = GetNextDlgTabItem (hDlg, hCurFocus, FALSE);
if (hNewFocus != hCurFocus)
{
SetNullFocus (hCurFocus);
SetFocus (hNewFocus);
}
return 0;
}
// 上, 下, 左, 右键响应
case SCANCODE_CURSORBLOCKUP:
case SCANCODE_CURSORBLOCKLEFT:
case SCANCODE_CURSORBLOCKDOWN:
case SCANCODE_CURSORBLOCKRIGHT:
{
HWND hNewFocus;
// 如果当前焦点控件要求处理箭头按键则不处理
if ( (hCurFocus) && (SendMessage(hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_WANTARROWS) )
break;
// 右, 下: 向后遍历
if ( (SCANCODE_CURSORBLOCKDOWN == LOWORD(wParam)) ||
(SCANCODE_CURSORBLOCKRIGHT == LOWORD(wParam)) )
hNewFocus = GetNextDlgGroupItem (hDlg, hCurFocus, FALSE);
// 左, 上: 向前遍历
else
hNewFocus = GetNextDlgGroupItem (hDlg, hCurFocus, TRUE);
if ( hNewFocus != hCurFocus )
{
// 如果当前焦点控件是static 时则不处理
if ( SendMessage(hCurFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_STATIC)
return 0;
SetFocus (hNewFocus);
// Radio 风格Button 控件的特殊处理
if ( SendMessage(hNewFocus, MSG_GETDLGCODE, 0, 0L) & DLGC_RADIOBUTTON )
{
SendMessage (hNewFocus, BM_CLICK, 0, 0L);
ExcludeWindowStyle (hCurFocus, WS_TABSTOP);
IncludeWindowStyle (hNewFocus, WS_TABSTOP);
}
}
return 0;
}
default:
break;
} // end swtich(wParam)
break;
}
default:
break;
} // end swtich(message)
return DefaultMainWinProc (hDlg, message, wParam, lParam);
} // end AppDefaultWindowProc()
// XX对话框过程处理函数
static int SomeDlgProc (HWND hDlg,int message,WPARAM wParam,LPARAM lParam)
{
switch (message)
{
case XX:
break;
... ...
default:
break;
}
// return DefaultWindowProc (hDlg, message, wParam, lParam);
return AppDefaultWindowProc (hDlg, message, wParam, lParam);
}| I | Attachment | Action | Size | Date | Who | Comment |
|---|---|---|---|---|---|---|
| | diy2_1.jpg | manage | 30.3 K | 14 Mar 2010 - 17:39 | MingmingKiller | Figure 1 |