MFC forget

1. 让MFC支持拖放
1).CXXApp::InitInstance()中增加语句
  m_pMainWnd->DragAcceptFiles(TRUE);

2).CMainFrame响应ON_WM_DROPFILES消息、

3).void CMainFrame::OnDropFiles(HDROP hDropInfo) 中增加实现

    char zsFilePath[MAX_PATH];
int nFileCount = DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,0);
if(nFileCount > 1)
{
MessageBox("Only the first file is loaded!");
}
DragQueryFile(hDropInfo,0,zsFilePath,MAX_PATH);
DragFinish(hDropInfo);

AfxGetApp()->OpenDocumentFile(zsFilePath);

函数说明参见MSDN

PS: 3中增加的实现是 CMainFrame::OnDropFiles(HDROP hDropInfo) 默认实现
    所以可以直接启用默认流程,条件是CDocument::OpenDocumentFile()被重载成
    期望的样子




2. 增加状态栏项目

1). "Resource/String Table"中增加新的String ID, 设置初值

2). MainFrm.cpp开头的
    static UINT indicators[] =
{
ID_SEPARATOR,           // status line indicator
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
    数组中加入自己的String ID, 这里决定了新增项的位置

3). 在CMainFrame中加入消息响应函数
    3.1 Message Map中加入声明 
        例如 ON_UPDATE_COMMAND_UI(ID_INDICATOR_LAYER,OnUpdateLayerPane)
    3.2 函数声明和实现
        声明: afx_msg void OnUpdateLayerPane(CCmdUI *pCmdUI);
        实现:   void CMainFrame::OnUpdateLayerPane(CCmdUI *pCmdUI)
{
pCmdUI->Enable(TRUE);
}
4). 在CMainFrame::OnCreate()中创建新项目
    例如
    m_wndStatusBar.SetPaneInfo(m_wndStatusBar.CommandToIndex(ID_INDICATOR_LAYER),
ID_INDICATOR_LAYER,SBPS_NORMAL , 90);              

5). 为新项目提供接口
    例如 void CMainFrame::UpdateLayerPane(int nActiveLayer, int nTotalLayer)
{
CString zsText;
zsText.Format("Layer [%d/%d]",nActiveLayer + 1, nTotalLayer);
m_wndStatusBar.SetPaneText(m_wndStatusBar.CommandToIndex(ID_INDICATOR_LAYER),zsText,TRUE);
}


3.SID 启动隐藏到系统盘 不闪烁

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
//   the CREATESTRUCT cs
cs.style = WS_POPUP;
cs.dwExStyle |= WS_EX_TOOLWINDOW;
return TRUE;
}

4. CRectTracker
一个简单的应用是在OnLButtonDown()中调用以下代码
m_pMoveTrack->TrackRubberBand(this, point) //开始绘制鼠标跟踪框
m_pMoveTrack->GetTrueRect(&m_rcTrack);//获得跟踪结果
注意返回的m_rcTrack是当前屏幕坐标,即窗口左上角是(0,0),需要考虑scrollbar和缩放的影响
不过这个类似乎更加适合用来做基类


5. SHBrowseForFolder()设置默认路径
    a) 完成一个callback函数
  int   CALLBACK   BrowserCallbackProc  (HWND   hWnd,  UINT   uMsg,  LPARAM   lParam,  LPARAM               lpData  )  
  {  
    switch(uMsg)  
    {  
 case   BFFM_INITIALIZED:
::SendMessage(hWnd,BFFM_SETSELECTION,1,lpData);  
break;  
 default:  
break;  
 
  return 0;
   }
    b) 调用SHBrowseForFolder()之前初始化参数时设置
      bif.lpfn = BrowserCallbackProc;
bif.lParam = (LPARAM)(LPCSTR)m_zsOut; //默认路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值