Ted 发布的文章

制作USB系统安装盘

工具

grub4dos
http://dl.grub4dos.chenall.net/grub4dos-0.4.6a-2017-05-29.7z

grubinst
https://github.com/chenall/grubutils/blob/master/grubutils/grubinst/grubinst-1.3.zip

install debian

1. 解压grubinst-1.3.zip,运行grubinst_gui.exe,将grub4dos安装到U盘

2. 解压grub4dos-0.4.6a-2017-05-29.7z中的所有文件至U盘根目录

3. 在U盘根目录新建文件夹 debianinst,解压debian 8.8 iso到此目录

4. 修改memu.lst

title Install Debian 8.8
find --set-root /debianinst/install.amd/vmlinuz
kernel /debianinst/install.amd/vmlinuz
initrd /debianinst/install.amd/initrd.gz
boot

install windows 7

1. 将windows 7 iso的所有文件解压到U盘根目录

2. 修改memu.lst

title Install Windows 7
chainloader /bootmgr

Code Snippet - Manipulate Control from WorkerThread

MFC多线程开发经常碰到需要在线程中对主窗口的控件进行处理的情况,比如设置控件状态,修改控件文字等,用AfxBeginThread()来创建工作者线程(WorkerThread)

CWinThread *pThread = AfxBeginThread(ThreadFunc, (LPVOID)this);

线程函数

static UINT ThreadFunc(LPVOID lpParam);

UINT CDemoDlg::ThreadFunc(LPVOID lpParam)
{
    CDemoDlg *pMainDlg = (CDemoDlg *)lpParam;
    
    pMainDlg->GetDlgItem(IDC_EDIT1)->SetWindowText(_T("DEMODEMO"));
    
    return 0;
}

上面的写法可以编译通过,大部分情况下也能正常运行,但在工作者线程中直接访问主线程(即UI线程)是不安全的,某些情况会导致线程死锁,甚至程序崩溃。

- 继续阅读 -

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控件来显示日志,在需要时显示日志窗口,不需要时则隐藏。

- 继续阅读 -