原msdn地址
https://msdn.microsoft.com/zh-cn/library/ee851785.aspx
这是基于单文档的,于是想写一个基于对话框的。遇到以下问题解决:
重点问题:关于接收窗口触摸的消息,对话框是放在xxxDlg的OninitDialog中,以下是初始化代码。
BOOL Ctouchdialog5Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
//!!!以下是初始化代码-------------------------------------------------------------------------------
BYTE digitizerStatus = (BYTE) GetSystemMetrics(SM_DIGITIZER);
if ((digitizerStatus & (0x80 + 0x40)) == 0) //检查程序准备完毕,并检测硬件
{
AfxMessageBox(L"未检测到触控设备!");
AfxMessageBox(L"无法加载触控设备,程序无法加载");
CDialogEx::OnOK();//不让主程序窗口出来
return FALSE;
}
BYTE nInputs = (BYTE) GetSystemMetrics(SM_MAXIMUMTOUCHES);
CString str;
str.Format(L"检测到支持 %d点触控", nInputs);
AfxMessageBox(str);
//重点! 在这里接收触摸消息!---------------------------放在Create虚函数中没用
if (!RegisterTouchWindow())
{
ASSERT(FALSE);
}
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
</pre><pre name="code" class="cpp">
关于构造函数中的初始化m_iCurrColor(0) 原msdn中是在childview中 这次直接用个逗号跟在Cxxxdlg构造函数的后面就可以了:
Ctouchdialog5Dlg::Ctouchdialog5Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(Ctouchdialog5Dlg::IDD, pParent),m_iCurrColor(0)