Tài liệu Visual C-017 Việt hóa Dialog thông dụng pdf

7 299 0
Tài liệu Visual C-017 Việt hóa Dialog thông dụng pdf

Đang tải... (xem toàn văn)

Thông tin tài liệu

Vit hoá mt s Dialog thông dng Vn Chí Nam – Nguyn c Hoàng H Khoa Công ngh Thông tin, Trng H KHTN TP.HCM (vcnam@fit.hcmuns.edu.vn, ndhha@fit.hcmuns.edu.vn) Phiên bn cp nht ngày 16/05/2005 Chúng ta đã quá quen vi mt s dialog thông dng : Open Dialog, Color Dialog, SaveAs Dialog,… ây là nhng dialog chun đã đc MFC h tr tt thông qua các lp CFileDialog, CColorDialog,… Chúng ta cng đu bit nhng dialog này đu s dng ting Anh làm ngôn ng giao tip, câu hi đt ra  đây, liu chúng ta có th Vit hoá nhng dialog này hay không ? iu đó có ngha là vn gi nguyên nhng thành phn trên các dialog chun này, ch thay th nhng phn hin th bng ngôn ng  Anh thành ngôn ng Vit. Trong bài vit này, tôi s gii thiu cách thc vit hoá mt dialog quen thuc: Open Dialog. Các dialog khác có cách thc hin tng t. Hình nh Open dialog thông dng Hình nh Open dialog sau khi đc Vit hoá Bây gi, chúng ta s làm quen vi mt s thao tác c bn đu tiên. Vit hoá mt control Công vic này lúc mi nghe qua tng chng là khó khn, nhng thc cht không có gì là gay go c, đó ch là công vic thay đi thuc tính font ca các control thành font ting Vit (trong trng hp này, tôi s dng font ting Vit VK Sans Serif).  thay đi thuc tính font ca control, chúng ta có th có các cách sau đây : + Th nht, thay đi thu c tính font cho toàn b dialog, bng cách thay đi chn font trong bng property ca dialog. + Th hai, thit lp font cho tng control có lp dn xut t CWnd. CFont *font; LOGFONT logFont; CWnd* pWnd; pWnd = GetParent()->GetDlgItem(IDOK); //ly con tr CWnd ca đi tng có ID là IDOK font = pWnd->GetFont(); //ly font ca đi tng font->GetLogFont(&logFont); //chuyn đi CFont v dng cu trúc LOGFONT strcpy(logFont.lfFaceName,"VK Sans Serif"); //thay đi tên font  đây //thay đi thuc tính tên font ca cu trúc LOGFONT FontTemp = new CFont; //FontTemp bin member thuc tính private ca lp FontTemp->CreateFontIndirect(&logFont); pWnd->SetFont(FontTemp); //gán font mi cho đi tng GetParent()->GetDlgItem(IDOK)->SetWindowText("&Më tËp tin"); //M tp tin //thay đi ni dung text ca đi tng Ly ID ca mt control trên mt dialog Thông thng, khi chúng ta s dng control, chúng ta đu đt cho chúng mt cái tên đ d dàng s dng sau này. Các tên này đôi khi không cn thit vì mi cái tên đc tng ng bng mt con s duy nht do trình biên dch gán cho và đc đt trong tp tin Resource.h. Chúng ta làm vic vi các control thông qua các cái tên thc cht làm vic vi các con s. Vi các dialog do chúng ta to ra, chúng ta d dàng xác đnh đc các con s này, nhng vi các dialog do ngi khác vit thì làm sao chúng ta có th  xác đnh đc các giá tr này ? Cách đn gin là dùng chng trình Spy++ có sn trong b tools khi chúng ta cài VC++ hoc VB. Hình nh ca chng trình Spy++ thc thi  ly control ID ca mt control, chúng ta phi xác đnh control đó thuc v dialog nào và nó có tên là gì. Khi chy Spy++ chúng ta s thy hình nh mt Tree control, mi nhánh s đi din cho mt chng trình (hoc 1 dialog) hin đang chy trên máy. C gng dò tìm dialog thích hp. M rng (expand) nhánh bng cách bm vào nút “+”. Mt lot các control có trên chn control đó s xut hin. Chn control thích hp cn ly ID (d nhiên là phi c đoán đó là control nào trong c đng control), nhn phím chut phi, chn chc nng Property. Ta s thy đc hình nh sau : Trên Window Properties có rt nhiu thuc tính,  đây, chúng ta ch quan tâm đn ID ca nó nên ta ch cn bit đn giá tr control ID (dng Hexa) mà thôi. Lu ý rng giá tr ID này ch duy nht trên dialog đc chn mà thôi. Các bc thc hin Bc 1 To mt dialog mi. Thit lp cho nó các thuc tính sau (trong Styles) : style = child ; border = none; check clip siblings Thêm trên dialog mi này mt group box control không có caption và ID ca nó là stc32 = 0x045F (Quan trng !!!). (Trên dialog này có th thêm các control khác tu theo ý ngi thit k.) Bc 2 To mt lp mi cho dialog này, lp mi này ban đu dn xut t CDialog và đc đt tên là CSpecialFileDialog. Trong file Header thay đi : class CSpecialFileDialog : public CFileDialog //dn xut t CFileDialog thay vì t CDialog CSpecialFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL); //constructor Trong file thc thi.CPP : CSpecialFileDialog::CSpecialFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) { //{{AFX_DATA_INIT(CSpecialFileDialog) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_ofn.Flags |= OFN_ENABLETEMPLATE; m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_DIALOG1); m_ofn.lpstrTitle = "Mo tap tin";//thay đi ni dung caption bar ca dialog } Thêm vào lp CSpecialDialog mt bin private là mt đi tng con tr FontTemp thuc lp CFont, con tr này có nhim v lu gi thuc tính font ca các control trong Dialog, cn phi hu b con tr khi không s dng dialog na. Bc 3 Thêm vào lp CSpecialDialog hàm OnInitDialog có ni dung nh sau : BOOL CSpecialFileDialog::OnInitDialog() { BOOL bRet = CFileDialog::OnInitDialog(); CFont *font; LOGFONT logFont; if (bRet == TRUE) { //xác đnh và thay đi font ting Vit cho các control cn thit. CWnd* pWnd; pWnd = GetParent()->GetDlgItem(IDOK); font = pWnd->GetFont(); font->GetLogFont(&logFont); strcpy(logFont.lfFaceName,"VK Sans Serif"); FontTemp = new CFont; FontTemp->CreateFontIndirect(&logFont); pWnd->SetFont(FontTemp); GetParent()->GetDlgItem(IDOK)->SetWindowText("&Më tËp tin");/*M tp tin*/ GetParent()->GetDlgItem(0x442)->SetFont(FontTemp); GetParent()->GetDlgItem(0x442)->SetWindowText("&Tªn tËp tin");/*Tên tp tin*/ GetParent()->GetDlgItem(0x443)->SetFont(FontTemp); CRect rect; pWnd = GetParent()->GetDlgItem(0x443); // //đon chng trình này dùng đ điu chnh v trí ca control. pWnd->GetClientRect(&rect); rect.right += 30; pWnd-> SetWindowPos (&wndTop,rect.left,rect.top+10,rect.Width(),rect.Height(), SWP_SHOWWINDOW); // GetParent()->GetDlgItem(0x443)->SetWindowText("Th- môc");//Th mc GetParent()->GetDlgItem(0x441)->SetFont(FontTemp); GetParent()->GetDlgItem(0x441)->SetWindowText("&Lo¹i tËp tin");//Loi tp tin GetParent()->GetDlgItem(IDCANCEL)->SetFont(FontTemp); GetParent()->GetDlgItem(IDCANCEL)->SetWindowText("&Hñy chän");//Hy chn } return bRet; } Ghi chú : các giá tr ID 0x441,0x442,0x443 đc xác đnh bng Spy++ theo cách đã trình bày  trên. Bc 4 Xoá b con tr FontTemp khi không còn s dng dialog na. BOOL CSpecialFileDialog::DestroyWindow() { // TODO: Add your specialized code here and/or call the base class if (FontTemp) delete FontTemp; return CDialog::DestroyWindow(); } Do CSpecialDialog dn xut t CFileDialog nên ta có th thêm cho nó mt s hàm cn thit ca riêng chúng ta nh : CString CSpecialFileDialog::Layduongdan() { return CFileDialog::GetPathName(); } CÁCH S DNG Cách s dng không khác gì so vi CFileDialog, khai báo mt đi tng thuc lp CSpecialDialog và s dng hàm DoModal đ kích hot dialog hot đng Ví d : CSpecialDialog dlg(TRUE); if (dlg.DoMoDal() == IDOK) { } Các dialog dn xut t các lp còn li có cách thc hin không khác lm. Tài Liu Tham Kho : - Programming VC++6.0 Fifth Edition - MSDN Library . mt s dialog thông dng : Open Dialog, Color Dialog, SaveAs Dialog, … ây là nhng dialog chun đã đc MFC h tr tt thông qua các lp CFileDialog,. hoá mt dialog quen thuc: Open Dialog. Các dialog khác có cách thc hin tng t. Hình nh Open dialog thông dng Hình nh Open dialog sau

Ngày đăng: 24/01/2014, 02:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan