VS2005 的 MFC 添加事件、映射消息和重载函数的操作 和 VS6.0 不一样,是在窗口类的属性页里。操作如下:
在“类视图”中,右键单击想要操作的窗口类,点击“属性”。在打开的属性页中,最上一排按钮中的“事件”、“信息”和“重写”分别对应“添加事件”、“映射消息”和“重载函数”的操作。
[ 标签: MFC, 映射消息, 添加事件, 重载方法 ][ 固定链接:http://m.tanggaowei.com/2008/05/08/74.html ]
每个人都有一个世界,新的思想,能拥有新的世界
VS2005 的 MFC 添加事件、映射消息和重载函数的操作 和 VS6.0 不一样,是在窗口类的属性页里。操作如下:
在“类视图”中,右键单击想要操作的窗口类,点击“属性”。在打开的属性页中,最上一排按钮中的“事件”、“信息”和“重写”分别对应“添加事件”、“映射消息”和“重载函数”的操作。
[ 标签: MFC, 映射消息, 添加事件, 重载方法 ](虽然能捕捉到,但是好像最后还是执行了返回桌面操作)
1. 注册热键
BOOL CMyProjectDlg::OnInitDialog()
{
…
// 处理 VK_HOME
BYTE appkey = SHGetAppKeyAssoc(_T(“MiniBlogClient.exe”));
::RegisterHotKey ( m_hWnd, appkey, MOD_WIN, VK_THOME);
…
}
2. 重写 PreTranslateMessage 函数
BOOL CMyProjectDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if( pMsg->message == WM_HOTKEY )
{
SetForegroundWindow();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
在手机里,按下 HOME 键后,在“任务管理器(CeleTask.exe)”里就找不到应用程序了。碰到这样的事情,真是很郁闷!解决方法如下:
在“资源视图”的窗口编辑器里,将窗口的 style 属性修改为 Overlapped,再重新编译。
[ 标签: HOME键, 任务管理器 ]1. 控件获得焦点时,屏蔽输入法
void CBlogEdit::OnSetFocus(CWnd* pOldWnd)
{
CEdit::OnSetFocus(pOldWnd);
// 关闭输入法
HIMC hIMC = ImmGetContext( this->GetSafeHwnd() );
ImmSetOpenStatus ( hIMC, FALSE );
}
2. 映射 WM_CHAR 消息到 OnChar ()
void CBlogEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// nChar 的值在不同手机上可能有所不同
switch ( nChar )
{
// Up
case 50:
{
this->LineScroll ( -1 );
break;
}
// Down
case 56:
{
this->LineScroll ( 1 );
break;
}
// PageUp
case 52:
{
this->LineScroll ( -11 );
break;
}
// PageDown
case 54:
{
this->LineScroll ( 11 );
break;
}
}
// CEdit::OnChar(nChar, nRepCnt, nFlags);
}
#include <windows.h>
#include <afxwin.h>
#include <atltime.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
int _tmain(int argc, _TCHAR* argv[])
{
char buff[80];
__time64_t result;
// 构造 2008年4月28日 22:18:39 的时间
CTime t(2008,4,28,22,18,39);
CString s = t.Format( _T(“%A, %B %d, %Y”) );
struct tm when;
t.GetLocalTm(&when);
// 在自定义的时间上,再加 8 小时
// 即变为 2008年4月29日 6:18:39
when.tm_hour = when.tm_hour + 8;
// 重构时间,并输出显示
if( (result = mktime( &when )) != (time_t)-1 )
{
asctime_s( buff, sizeof(buff), &when );
printf( “the time will be %s\n”, buff );
}
else
{
printf( “mktime failed” );
}
}