Code Snippet - MFC调整窗口大小

限制窗口大小

MFC程序的窗口一般可以自由缩放,如需限制窗口的最大/最小尺寸,可以通过响应WM_GETMINMAXINFO消息来实现。

在程序初始化时,获取窗口的默认大小,限制窗口缩放的最小值为其初始尺寸。示例代码如下

DemoDlg.h

CRect rcMainDlg;

DemoDlg.cpp
    
BOOL CDemoDlg::OnInitDialog()
{
    //...

    GetWindowRect(&rcMainDlg);

    //...
}

void CDemoDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
{
    lpMMI->ptMinTrackSize.x = rcMainDlg.Width();
    lpMMI->ptMinTrackSize.y = rcMainDlg.Height();

    CDialogEx::OnGetMinMaxInfo(lpMMI);
}

- 继续阅读 -

Code Snippet - 实现非模态对话框显示程序运行日志

软件项目发展到一定规模时,为程序加入运行日志是很好的测试和监控手段。最近尝试在一个历史比较悠久的MFC程序中加入此功能,记录下主要步骤。

因为程序的主界面已经比较复杂,因此创建独立的非模态对话框,并用ListBox控件来显示日志,在需要时显示日志窗口,不需要时则隐藏。

- 继续阅读 -

Code Snippet - Select Folder

在VS2010及以上版本中,MS加入了原生的文件夹选择类CFolderPickerDialog

示例代码

void SelectFolder()
{
    CString strDir;
    CString strFolderPath;
    CFolderPickerDialog dlg(strDir, 0, NULL, 0);

    if (dlg.DoModal())
    {
        strFolderPath = dlg.GetPathName();
        MessageBox(strFolderPath, "Folder Path", MB_OK);
    }
}

- 继续阅读 -

按行读取文本文件

快到春节假期了,准备在吃喝的业余时间编写一个图书管理软件,用来整理本地硬盘上的各种电子书信息和目录索引。有个需求是从Excel文件导入图书列表,然后爬取亚马逊上的图书信息并添加到本地,从Excel文件读取数据采用以前讨论过的免费工具xdoc2txt

Ted's Chaos - Convert xls to txt
http://blog.libsd.org/272/

先将Excel文件转化为txt文件,然后按行从txt中读取图书信息(书名、出版社、ISBN等)。

- 继续阅读 -

隐藏调用命令行程序时的执行窗口

在实际开发中往往需要调用外部程序来完成某些特定功能,通常有以下几种方式

int system();

UINT WINAPI WinExec();

HINSTANCE ShellExecute();

BOOL WINAPI CreateProcess();

其中最简单的就是system(),只需要把被调用的程序和参数当作字符串传入。最复杂的是CreateProcess(),参数很多,也是MS最为推荐的方式。

- 继续阅读 -

搜索系统中的可用串口

串口是工业领域使用频率非常高的接口,最常见的场景是设备和PC通过串口相连接,从PC给设备发送控制指令,接收设备回传的数据等。因此运行在PC端的软件就需要有列出系统中可用串口的功能,不管是主板自带的串口还是USB转串口线缆,正确安装驱动后都会保存到注册表中,可以简单地通过读注册表来获取可用串口列表。

系统中的可用串口会保存在以下注册表项,如果用户将某个串口禁用,系统会将其从注册表中删除

[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM]

读取注册表需要用到的API

LONG WINAPI RegOpenKeyEx();
LONG WINAPI RegEnumValue();

- 继续阅读 -