;;&;&;&; (keyState[VK_CAPITAL] &;&; 1)) ) { // 模拟按下一个键 keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // 模拟放开一个键 keybd_event( VK_CAPITAL, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } } // 当用户切换到 Edit1 控件,设置为大写状态 void CDlgDlg::OnSetfocusEdit1() {SetCapsLock(TRUE);} // 当用户离开 Edit1 控件,设置为小写状态 void CDlgDlg::OnKillfocusEdit1() { SetCapsLock(FALSE);} 不过对于你的问题,我建议采用另一种方法,即重载 PreTranslateMessage 函 数,用户每输入一个字母就将其自动转换为大写,而不是修改 Caps Lock 键,如 : BOOL CDlgDlg::PreTranslateMessage(MSG* pMsg) { if(pMsg-〉message == WM_CHAR &;&;&;&; pMsg-〉hwnd == ::GetDlgItem(m_hWnd, IDC_EDIT1)) { pMsg-〉wParam = toupper(pMsg-〉wParam);} return CDialog::PreTranslateMessage(pMsg);
} 问: 如何编程实现 Windows 关机的那个对话窗口?就是说,如果我按一个按钮 ,就可以出现关机对话窗口,让我选择是否关机、重启等等?而且背景也是那样 的灰暗。是否有一个现成的 API 可以调用? 答:有一个未公开的 API 函数可以实现这个功能,是在 Shell32.dll 中,但没 有名字,索引号为 60。这种函数可以使用 LoadLibrary 和 GetProcAddress 函数进行 调用。 下面就是一个例子: typedef int (CALLBACK *SHUTDOWNDLG) (int); void CDlgDlg::OnOK() { CString s; HINSTANCE hInst = LoadLibrary("shell32"); SHUTDOWNDLG SHShutDownDialog; if(hInst != 0) { // 获得显示关机对话框函数的地址并调用 SHShutDownDialog = (SHUTDOWNDLG)GetProcAddress(hInst, (LPSTR)60); (*SHShutDownDialog)(0); FreeLibrary(hInst); }} 问:在 VC 中有无方法可以像 VFP 一样加减日期,从而得出它们之间的时间差值 ? 答:可以使用 CTime 类来表示日期,如: CTime t1( 1999, 3, 19, 22, 15, 0 ); // 1999 年 3 月 19 日 22:15 CTime t2( 1999, 3, 20, 22, 15, 0 ); // 1999 年 3 月 20 日 22:15 CTimeSpan
ts = t2 - t1; // 对两个日期变量相减,差值保存在 CTimeSpan 变量中 ASSERT( ts.GetTotalSeconds() == 86400L );