수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1621009
  • Today | 389
  • Yesterday | 482

1 Articles, Search for '최근 사용한 파일 목록'

  1. 2007/03/01 Dialog Based 프로그램에서 '최근 사용한 파일 목록' 메뉴 넣기
Programming/MFC2007/03/01 19:16

Dialog Based 프로그램에서 '최근 사용한 파일 목록' 메뉴 넣기

원본 : http://www.debuglab.com/knowledge/recentlistdialog.html

1.요약

Dialog Based 로 만든 프로그램의 메뉴에 '최근 사용한 파일 목록'을 만들어 봅시다.


2.본문

SDI/MDI 의 경우 Doc/View 구조에 의해서 MFC 가 '최근 사용한 파일'에 대한 리스트를 메뉴에 보여주는 기능을 제공하고 있습니다. 하지만, 이러한 방법은 SDI/MDI 의 경우에만 제공되고 있기 때문에 Dialog Based 프로그램에서는 정상적으로 작동하지 않습니다. 따라서 CMRUList 라는 클래스를 만들어서 그 기능을 구현해 보았습니다.

CMRUList 는 아래와 같은 함수들을 제공합니다.

// nFileNum 번째 위치한 메뉴의 Path 를 얻습니다.
CString GetFilePath(int nFileNum, BOOL *pbEnable = NULL); 

CString GetMenuPath(int nFileNum, BOOL *pbEnable = NULL); 
: 첫번째 함수는 실제 파일의 경로를 얻기 위한 함수이며, 두번째 함수는 메뉴에 Path 를 뿌려주기 위해서 인덱스를 포함한 경로를 얻기 위한 함수입니다.

// 특정 Path 를 메뉴에 넣습니다.
void AddFilePath(CString strFilePath); 
: 파일을 Open 하는 메소드에서 새로운 경로를 추가하기 위해서 사용합니다. 중복 처리나 순서에 대한 처리는 클래스 내부에서 수행합니다.

// MRU 리스트를 저장합니다.
void Save(); 
: 현재 지정되어 있는 경로들을 저장합니다. (프로그램이 종료할때 사용하시면 됩니다.)

// 특정 위치의 Path 를 리스트에서 제거합니다.
void DeletePath(int nNum); 
: 이 함수는 실제로 파일을 Open 했을때 파일을 정상적으로 열지 못할경우 리스트에서 제거하기 위해서 사용합니다.

// 전체 Path의 갯수를 얻습니다.
int GetTotalPath(); 
: 현재 등록되어 있는 Path 의 갯수를 얻습니다.


3.예제


// [ 최근 사용한 파일 목록 ] 

// |----> [ IDM_MRU_FILE1 ] 

// |----> [ IDM_MRU_FILE2 ] 

// |----> [ IDM_MRU_FILE3 ] 

// |----> [ IDM_MRU_FILE4 ] 





// 2. Dialog 의 header 파일에 아래의 함수를 추가합니다. 

afx_msg void OnUpdateRecentFile(CCmdUI* pCmdUI); 

afx_msg void OnRecentFile(int nID); 





// 3. CMRUList 의 객체를 선언합니다. 

public: 

    CMRUList m_ctrMRUList; 

    int m_nTotalMruMenu;  // 전체 메뉴 갯수 

    

    

// 4. Dialog 의 cpp 파일의 메세지 핸들러를 추가합니다. 

ON_COMMAND_RANGE(IDM_MRU_FILE1, IDM_MRU_FILE4, OnRecentFile) 

ON_UPDATE_COMMAND_UI_RANGE(IDM_MRU_FILE1, IDM_MRU_FILE4 , OnUpdateRecentFile) 

        

        

// 5. 생성자에서 현재 초기화된 메뉴의 갯수를 저장합니다. 

m_nTotalMruMenu = m_ctrMRUList.GetTotalPath(); 

    

    

// 6. 메뉴를 업데이트 하기 위한 핸들러를 구현합니다. 

void CTestDlg::OnUpdateRecentFile(CCmdUI* pCmdUI) 

{ 

    BOOL bEnable; 

    

    // 새로 생긴 메뉴가 있다면 생성합니다. 

    if (m_nTotalMruMenu != m_ctrMRUList.GetTotalPath()) 

    { 

        switch(m_nTotalMruMenu) 

        { 

        case 0: 

            pCmdUI->m_pMenu->InsertMenu(IDM_MRU_FILE1, 

                MF_BYCOMMAND|MF_STRING, IDM_MRU_FILE1); 

        case 1: 

            pCmdUI->m_pMenu->InsertMenu(IDM_MRU_FILE2, 

                MF_BYCOMMAND|MF_STRING, IDM_MRU_FILE2); 

        case 2: 

            pCmdUI->m_pMenu->InsertMenu(IDM_MRU_FILE3, 

                MF_BYCOMMAND|MF_STRING, IDM_MRU_FILE3); 

        case 3: 

            pCmdUI->m_pMenu->InsertMenu(IDM_MRU_FILE4, 

                MF_BYCOMMAND|MF_STRING, IDM_MRU_FILE4); 

        } 

        

        m_nTotalMruMenu = m_ctrMRUList.GetTotalPath(); 

        

        return; 

    } 

    

    // 메뉴의 Text를 업데이트 합니다. 

    switch(pCmdUI->m_nID) 

    { 

    case IDM_MRU_FILE1: 

        pCmdUI->SetText(m_ctrMRUList.GetMenuPath(0, &bEnable)); 

        break; 

    case IDM_MRU_FILE2: 

        pCmdUI->SetText(m_ctrMRUList.GetMenuPath(1, &bEnable)); 

        break; 

    case IDM_MRU_FILE3: 

        pCmdUI->SetText(m_ctrMRUList.GetMenuPath(2, &bEnable)); 

        break; 

    case IDM_MRU_FILE4: 

        pCmdUI->SetText(m_ctrMRUList.GetMenuPath(3, &bEnable)); 

        break; 

    } 

    

    // 현재 Path 가 지정되어 있지 않은 메뉴라면, 삭제합니다. 

    if (bEnable == FALSE) 

        pCmdUI->m_pMenu->RemoveMenu(pCmdUI->m_nID, MF_BYCOMMAND); 

    else 

        pCmdUI->Enable(TRUE); 

} 





// 7. 메뉴를 눌렀을때 발생하는 이벤트에 대해서 처리합니다. 

void CTestDlg::OnRecentFile(int nID) 

{ 

    

    CString strPath; 

    int nIDNum; 

    

    switch(nID) 

    { 

    case IDM_MRU_FILE1: 

        nIDNum = 0; 

        break; 

    case IDM_MRU_FILE2: 

        nIDNum = 1; 

        break; 

    case IDM_MRU_FILE3: 

        nIDNum = 2; 

        break; 

    case IDM_MRU_FILE4: 

        nIDNum = 3; 

        break; 

    } 

    

    // strPath 에는 선택된 파일에 대한 경로가 들어있습니다. 

    strPath = m_ctrMRUList.GetFilePath(nIDNum); 

} 


4.참고



5.주의

처음에는 메뉴에 대한 Path가 없기 때문에, 모든 메뉴가 자동으로 삭제되도록 되어 있습니다. 따라서 처음으로 파일을 열어서 path를 추가하고자 하실때 ( AddFilePath() 호출할때..), 임의로 InsertMenu() 함수를 통해서 아래와 같은 방법으로 추가해 주셔야 합니다.

예)

C:\test.cpp

if (m_ctrMRUList.GetTotalPath() == 1) 

{ 

    GetMenu()->GetSubMenu(0)->GetSubMenu(6)->InsertMenu(

        IDM_MRU_FILE1, MF_BYCOMMAND|MF_STRING, IDM_MRU_FILE1); 

    m_nTotalMruMenu = 1; 

} 



- 2001.08.13 Smile Seo -
"MFC" 카테고리의 다른 글
  • 원하는 확장자파일만 지우기 (0)2007/03/02
  • Serialize를 이용한 객체 복사하기 (Copy construc... (0)2007/03/01
  • Dialog Based 프로그램에서 '최근 사용한 파일 목... (0)2007/03/01
  • 현재 실행되고 있는 자신의 경로와 파일명 가져오기 (0)2007/03/01
  • Dialog Based 프로그램에서 가속키 기능 넣기 (0)2007/03/01
2007/03/01 19:16 2007/03/01 19:16
Posted by webdizen
Tags 최근 사용한 파일 목록
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2666

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 미러링
  • Data Types
  • Qcodo Framework
  • TDM
  • Multidimensional
  • 시맨틱 웹
  • 강의
  • Makefile
  • 프로그램 경로
  • 데이터
  • 삼성이건희장학생
  • 프로젝트
  • Pattern
  • 프레임워크
  • ToolBar
  • Sysinternals
  • 윈도우즈 종료
  • 스카치블루
  • Delegate
  • 약한 참조

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.