Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Cách gọi Browse Dialog trong VC++ 6.0 như thế nào?

  1. #1
    Ngày gia nhập
    09 2006
    Nơi ở
    Sơn La
    Bài viết
    11

    Mặc định Cách gọi Browse Dialog trong VC++ 6.0 như thế nào?

    Có ai biết cách gọi Browse Dialog không. Cụ thể là cái Dialog khi bấm vào button Browse ở trong cửa sổ Run ý
    Ai biết chỉ giùm với
    Thanh you very much

  2. #2
    Ngày gia nhập
    11 2007
    Bài viết
    40

    Bạn nói rõ hơn mở Folder hay File
    Demo cái mở File nhé

    Visual C++ Code:
    1. // Tạo 1 đối tượng kiểu CFileDialog có tên là dlg, và khởi tạo nó có các thuộc tính (nằm trong ngoặc)
    2. CFileDialog dlg(TRUE, 0, 0, OFN_HIDEREADONLY | OFN_FILEMUSTEXIST, "All files (*.*)|*.*||");
    3. // Nhận sự kiện của đối tượng dlg vừa được tạo, nếu bằng IDCANCEL thì trở về lại giao diện cũ
    4. if (dlg.DoModal() == IDCANCEL) return;
    5.  
    6. UpdateData(TRUE);
    7. // Trong đối tượng dlg trả về có 2 2 cần quan tâm là GetPathName() -> Cho ra đường dẫn File
    8. // GetFileName() cho ra tên File
    9. GetDlgItem(IDC_STT_PATH)->SetWindowText(dlg.GetPathName());
    10. GetDlgItem(IDC_STT_STATUS)->SetWindowText(dlg.GetFileName());
    11. // Còn 2 đối tượng IDC_STT_PATH và IDC_STT_STATUS là 2 cái TextBox trong Visual C++ 6.0 mình tạo ra
    12. // Hàm SetWindowText thực chất là gán giá trị của dlg tương ứng về cho nó.
    13.  
    14. // Lấy Đường dẫn và File name, 2 biến g_PathFile và g_FileName là 2 biến kiểu string để nhận đường dẫn cũng như File Name
    15. g_PathFile = dlg.GetPathName();
    16. g_FileName = dlg.GetFileName();
    Đã được chỉnh sửa lần cuối bởi hung.tran : 28-11-2007 lúc 06:25 PM.

  3. #3
    Ngày gia nhập
    09 2006
    Nơi ở
    Sơn La
    Bài viết
    11

    Vấn đề là tớ ko thích mở file, chỉ muốn lấy path của file được chọn thôi,vì mở file thì lúc sau tớ gọi 1 hàm khác dùng để mở nó sẽ ko mở được. Àh tiện thể ai biết cách đóng file mở bằng Dialog Open thì chỉ cho tui với, hì hục mãi mà chưa close được nó

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    40

    Trích dẫn Nguyên bản được gửi bởi timtrithuc Xem bài viết
    Vấn đề là tớ ko thích mở file, chỉ muốn lấy path của file được chọn thôi,vì mở file thì lúc sau tớ gọi 1 hàm khác dùng để mở nó sẽ ko mở được. Àh tiện thể ai biết cách đóng file mở bằng Dialog Open thì chỉ cho tui với, hì hục mãi mà chưa close được nó
    Thì theo như ý bạn thì bạn sẽ dùng nút Browse để chọn đường dẫn File mà. Lúc này nó đâu đã mở file đâu mà bạn lo. Nó chỉ giúp bạn xác định những thông tin về File như đường dẫn, Filename ...

    Còn việc đóng mở File thì bạn khai báo 1 instance của CFile, sau đó thao tác trên đó thì dùng Open hoặc Close thôi mà.

    Visual C++ Code:
    1. Demo code nữa nè:
    2. void CTestDlg::OnSaveBtn()
    3. {
    4.     // TODO: Add your control notification handler code here
    5.     this->UpdateData();
    6.  
    7.     CFile flEmployees;
    8.     char strFilter[] = { "Employees Records (*.dat)|*.dat|TestFile (*.tes)|*.tes|All Files (*.*)|*.*||" };
    9.  
    10.     CFileDialog FileDlg(FALSE, ".dat", NULL, 0, strFilter);
    11.  
    12.     if( FileDlg.DoModal() == IDOK )
    13.     {
    14.         if( flEmployees.Open(FileDlg.GetFileName(), CFile::modeCreate | CFile::modeWrite) == FALSE )
    15.             return;
    16.         CArchive ar(&flEmployees, CArchive::store); // Dùng để lưu trữ
    17.  
    18.         ar << m_FirstName << m_LastName << m_Address << m_City << m_State << m_ZIPCode << m_HourlySalary << m_EmploymentStatus;
    19.         ar.Close();
    20.     }
    21.     else
    22.         return;
    23.  
    24.     flEmployees.Close();// Đóng File ở đây nè
    25. }
    26.  
    27. void CTestDlg::OnOpenBtn()
    28. {
    29.     // TODO: Add your control notification handler code here
    30.     CFile flEmployees;
    31.     char strFilter[] = { "Employees Records (*.dat)|*.dat|TestFiles (*.tes)|*.tes|All Files (*.*)|*.*||" };
    32.  
    33.     CFileDialog FileDlg(TRUE, ".tes", NULL, 0, strFilter);
    34.    
    35.     if( FileDlg.DoModal() == IDOK )
    36.     {
    37.         if( flEmployees.Open(FileDlg.GetFileName(), CFile::modeRead) == FALSE )
    38.             return;
    39.         CArchive ar(&flEmployees, CArchive::load);
    40.  
    41.         ar >> m_FirstName >> m_LastName >> m_Address >> m_City >> m_State >> m_ZIPCode >> m_HourlySalary >> m_EmploymentStatus;
    42.         ar.Close();
    43.     }
    44.     else
    45.         return;
    46.     flEmployees.Close();// Đóng file
    47.  
    48.     UpdateData(FALSE);
    49. }

    Chú ý là khi bạn mở File thao tác xong phải đóng nó lại. Nếu không thì nó chiếm quyền đọc ghi File rồi thì chả có thằng nào đụng đến nó được hết áh.

    Hỏi bạn 1 câu là bạn có rành sử dụng Visual C++ 6.0 không vậy? Nếu bạn rành sử dụng thì cái này đâu có khó đâu.
    Để tìm hiểu thêm bạn vào đây -> Lập trình MFC theo như nhu cầu của bạn.

    Àh nói thêm. Khi bạn ltrình thì có MSDN đó. Bạn vào đó tìm thử đi. Có nhiều code và hướng dẫn cụ thể lắm.
    Chịu khó đọc nhiều rồi thử viết thì bạn sẽ hiểu.
    Đã được chỉnh sửa lần cuối bởi iamvtn : 28-11-2007 lúc 06:58 PM.

  5. #5
    Ngày gia nhập
    09 2006
    Nơi ở
    Sơn La
    Bài viết
    11

    Thank hung.tran đã nhiệt tình giúp đỡ
    Đúng như bạn nói là tui chỉ muốn lấy đường dẫn của File được chọn thui.
    Bạn có chắc là dùng dialog open thì chỉ lấy thông tin của file được chọn ko?
    Bạn thử xem đoạn code tui viết dưới đây:
    Visual C++ Code:
    1. void AddData::OnButtonPathData()
    2. {
    3.     // TODO: Add your control notification handler code here
    4.     CFileDialog dlg(TRUE,"*.wav",NULL,0,"Wave Files (*.wav)|*.wav|",this); 
    5.     if( dlg.DoModal() == IDOK ){    
    6.         CWnd *pWnd = NULL;
    7.         pWnd = GetDlgItem(IDC_EDIT_PATH_DATA);
    8.         pWnd->SetWindowText(dlg.GetPathName());
    9.     } else {
    10.         return;
    11.     }  
    12. }
    - Nếu tui gõ trực tiếp đường dẫn vào Edit box IDC_EDIT_PATH_DATA thì tui có thể mở file đó vô tư.
    - Còn nếu gọi cái hàm trên thì ko mở được File đó nữa
    => Chứng tỏ là sau khi dùng hàm trên có mở file
    Nhưng nếu tui thay đổi CFileDialog dlg(TRUE,"*.wav",NULL,0,"Wave Files (*.wav)|*.wav|",this); thành CFileDialog dlg(FALSE,"*.wav",NULL,0,"Wave Files (*.wav)|*.wav|",this); thì cửa sổ hiện ra là dialog Save as. Vậy liệu ta có thể thay đổi thông số nào đó để nó biến thành dialog browse ko

    Tại vì tui mới tự hoc VC++ nên ko rành cái này lắm, tui cũng đã tìm nhiều trên codeproject.com và MSDN rùi nhưng ko thấy (có lẽ mình rốt tiếng anh quá). Bạn thử xem lại vấn đề của tui với nhé
    Cảm ơn bạn lắm

  6. #6
    Ngày gia nhập
    11 2007
    Bài viết
    40

    Mặc định Cách gọi Browse Dialog trong VC++ 6.0 như thế nào?

    Khi gọi hàm tạo của CFileDialog thì nó chỉ tạo 1 đối tượng là dialog box của Windows thôi. Tôi chưa thấy tài liệu nào nói là nó đã mở File cả.
    Tôi sẽ giải thích các tham số đầu vào của hàm tạo CFileDialog cho bạn
    Visual C++ Code:
    1. explicit CFileDialog(
    2.    BOOL bOpenFileDialog,
    3.    LPCTSTR lpszDefExt = NULL,
    4.    LPCTSTR lpszFileName = NULL,
    5.    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    6.    LPCTSTR lpszFilter = NULL,
    7.    CWnd* pParentWnd = NULL,
    8.    DWORD dwSize = 0
    9. );

    Giải thích cách tham số của hàm tạo
    Description Code:
    1. bOpenFileDialog
    2.     Khi bạn muốn tạo 1 hộp thoại để mở File thì để tham số này là TRUE, Còn để Save as Dialog thì thiết lập tham số này là FALSE.
    3.     (Đây là lý do tại sao bạn hỏi đó)
    4. lpszDefExt
    5.     Phần đuôi file mà bạn cần mở. Nếu không set gì, chỉ để NULL thì mặc định nó cho mình thấy hết các loại đuôi File
    6. lpszFileName
    7.     Phần đuôi file sẽ hiện trong ô filename edit. Để NULL thì nó sẽ không hiển thị
    8. dwFlags
    9.     Đây là cờ cho bạn xác định tính chất File bạn sẽ mở. Ví dụ như là OFN_FILEMUSTEXIST | OFN_HIDEREADONLY nghĩa là File phải tồn tại hoặc mở ra chỉ đọc. Cái này muốn biết chi tiết thì tham khảo thêm trong MSDN.
    10. lpszFilter
    11.     Một string cho phép bạn xác định cách lọc kiểu File muốn đọc.    
    12. pParentWnd
    13.     Con trỏ đến đối tượng cha hay là owner Windows. Cái này bạn để this là hợp lý rồi
    14. dwSize
    15.     Kích thước của cấu trúc OPENFILENAME. Giá trị này tùy thuộc vào hệ điều hành. Chắc ăn nhất là không dùng vì mặc định nó được set là 0 rồi.
    Còn bạn làm vậy là được rồi. Sau khi lấy đừơng dẫn xong thì tha hồ làm gì thì làm. Tôi không biết code bạn sẽ làm những gì, nhưng không thể có chuyện chỉ có hàm tạo của CFileDialog mà đã mở File đâu. Có thao tác nào khác rồi đó. Bạn check lại kỹ nhé.
    Bạn nói dialog Browser tôi không hiểu. Vì thực chất Open File thì nó cũng Browse đến thẳng File rồi mà.
    Nếu cần bạn có thể bỏ cái code lên đây mọi người check giúp cho bạn.

  7. #7
    Ngày gia nhập
    09 2006
    Nơi ở
    Sơn La
    Bài viết
    11

    Thank hung.tran nhé . Đúng là như bạn nói, cái Dialog Open chưa mở file thật, hoá ra là do file CSDL của tui bị lỗi . Thế mà mãi ko phát hiện ra, gà thật đó

  8. #8
    Ngày gia nhập
    07 2010
    Bài viết
    3

    Nếu chỉ mở folder thì dùng hàm nào các bạn nhỉ?

  9. #9
    Ngày gia nhập
    11 2010
    Bài viết
    10

    Mặc định open folder dialog

    tôi thấy mấy bài trả lời toàn là open file dialog con open folder dialog thì không thấy ai trả lời hết?
    Không biết muốn hiện open folder dialog hay bất cứ cái nào tương tự trong C++ MFC thì phải làm sao?
    (chỉ chọn folder path không cho chọn file path)
    Ai đã từng làm qua cái này xin upload code lên đển bà con cũng tham khảo học hỏi với!

  10. #10
    Ngày gia nhập
    08 2011
    Bài viết
    98

    Trích dẫn Nguyên bản được gửi bởi lipton150786 Xem bài viết
    tôi thấy mấy bài trả lời toàn là open file dialog con open folder dialog thì không thấy ai trả lời hết?
    Không biết muốn hiện open folder dialog hay bất cứ cái nào tương tự trong C++ MFC thì phải làm sao?
    (chỉ chọn folder path không cho chọn file path)
    Ai đã từng làm qua cái này xin upload code lên đển bà con cũng tham khảo học hỏi với!
    CFolderDialog nhé bạn

    http://www.codeproject.com/Articles/2024/CFolderDialog-Selecting-Folders
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

Các đề tài tương tự

  1. Graphic Lấy hình captcha trong web browse bằng cách nào?
    Gửi bởi ngukha trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 26-09-2012, 10:46 AM
  2. Dialog::DoModal trong MFC. Làm thế nào để tương tác với dialog bên dưới?
    Gửi bởi rua_con trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 7
    Bài viết cuối: 29-02-2012, 03:27 PM
  3. Browse Folder trong C#[Tiêu đề ko rõ ràng, tìm trước khi hỏi]
    Gửi bởi havuanhle_uel trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 02-06-2011, 10:34 AM
  4. Có một dialog con muốn thay đổi một vài thông số trên dialog cha thì làm thế nào
    Gửi bởi theboy909 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 24-05-2011, 03:39 PM
  5. gọi dialog từ 1 dialog trong Visual C++ như thế nào?
    Gửi bởi attain11 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 27-10-2010, 09:29 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn