主窗口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