Tải bản đầy đủ (.pdf) (7 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (384.8 KB, 7 trang )



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
(, )
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

×