最近有个项目需要实时查看一些文件的内容,感觉可以自己做一个,说做就做。
习惯VS2015 MFC编程,一开始是打算单文档程序的,做了一个版本感觉怪怪的,感觉太复杂,用对话框程序做了一个。
其实比较简单,打开文件后,在edit中显示文件内容,文件打开写入参考其他大佬的文章:
https://blog.csdn.net/c_base_jin/article/details/54882541
通过定时器循环打开文件并把焦点放到最后面,因为需要把焦点设置在edit中,OnInitDialog函数要求返回FALSE
CEdit * pEdit = (CEdit*)GetDlgItem(IDC_EDIT);
pEdit->SetSel(-1);
pEdit->SetFocus();
后面加了一个标志位进行判断是否进行了修改,修改后停止实时更新文件。
添加一个拖入文件打开功能,方便使用
void CNoteViewerDlg::OnDropFiles(HDROP hDropInfo)
{
UINT count;
TCHAR filePath[MAX_PATH] = { 0 };
count = DragQueryFile(hDropInfo, -1, NULL, 0);
if (1 == count)
{
DragQueryFile(hDropInfo, 0, filePath, sizeof(filePath));
OpenFile(filePath);
}
DragFinish(hDropInfo);
CDialogEx::OnDropFiles(hDropInfo);
}
因为用了edit,缩放对话框时,需要自动调整大小,添加WM_SIZE消息,
void CNoteViewerDlg::OnSize(UINT nType, int cx, int cy)
{
CDialogEx::OnSize(nType, cx, cy);
CWnd* pWnd = GetDlgItem(IDC_EDIT);
if (pWnd->GetSafeHwnd())
pWnd->MoveWindow(15, 55, cx - 30, cy - 30 - 40);
}
最后分享一个对话框程序也能作为默认打开程序的方式,在OnInitDialog函数中添加,可实现拖动文本文件到程序文件中,程序打开并打开文件。
CString strfiles = theApp.m_lpCmdLine;
if (strfiles != "")
{
OpenFile(strfiles);
}
想要完整工程的也可以去下载,不过也是以上内容的整合: