《PicSi的实现细节》 第4节 主窗口CMainDlg的定义及杂项

本文详细介绍了PicSi中主窗口类CMainDlg的定义,并探讨了若干关键路径处理函数,如PS_IsDirectory用于判断路径是否为文件夹,PS_DirExists检查文件夹是否存在,PS_PathAppendBackslash则负责在路径末尾添加反斜杠。此外,还讲解了获取AppData目录、安装目录以及文件名和文件后缀名修改等实用函数的实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        主窗口CMainDlg的定义很好理解,虽然简单但却至关重要,毕竟Creator子窗口、About子窗口都被主窗口管理,它就是PicSi的“领导”,对全局进行控制。
       首先需定义3个控制成员变量m_tab、m_creator及m_about,分别对应主窗口中tab控制、Creator子窗口、About子窗口。
       接着在OnInitDialog方法中初始化Tab控制,创建Creator子窗口和About子窗口,默认情况下显示Creator子窗口而隐藏About子窗口。此外,调用方法DraAcceptFiles(TRUE),允许文件拖拽(Drag and drop)。
       定义OnSize方法,调整上述控制的位置和尺寸,比较简单,再此不赘述。
       主窗口需要响应IDC_TAB控制的通知消息TCN_SELCHANGE,当用户选择某一选项卡时,该通知消息将会被抛出。定义OnTabSelChange方法,它根据用户的选中,对Creator子窗口和About子窗口进行Show或Hide操作。主窗口还需要响应WM_DROPFILES消息,当用户将一个或多个文件拖拽到PicSi的窗口中时,该消息将会被主窗口捕获。
       在OnDropFiles方法中,首先判断拖入的是否为文件夹,若是则弹窗提示不能添加文件夹,若否则说明是常规文件,调用m_creator.AddFile方法添加到Listview控制中。
       CMainDlg的全部代码如下所示:
// MainDlg.h : interface of the CMainDlg class
//
/

#pragma once

#include "private/Fcommon.h"
#include "src/PicsiCreatorDlg.h"
#include "aboutdlg.h"

class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>,
		public CMessageFilter, public CIdleHandler
{
public:
	enum { IDD = IDD_MAINDLG };

private:
	CTabCtrl m_tab;
	CPicsiCreatorDlg m_creator;
	CAboutDlg m_about;

public:
	virtual BOOL PreTranslateMessage(MSG* pMsg)
	{
		return CWindow::IsDialogMessage(pMsg);
	}

	virtual BOOL OnIdle()
	{
		return FALSE;
	}

	BEGIN_UPDATE_UI_MAP(CMainDlg)
	END_UPDATE_UI_MAP()

	BEGIN_MSG_MAP(CMainDlg)
		MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
		MESSAGE_HANDLER(WM_DESTROY, O
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值