1. Trang chủ
  2. » Công Nghệ Thông Tin

Hướng dẫn từng bước thao tác C trên Win (MFC) docx

14 575 5

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 150 KB

Nội dung

I- TẠO GIAO DIỆN: 1.CÂU LỆNH TẠO VỊ TRÍ XUẤT HIỆN CỦA CỬA SỔ viết trong miền làm việc lopclassview->chon lop cmainfrane->precreatewindow //BOOL CMainFrame::PreCreateWindowCREATESTRUCT&

Trang 1

Các câu lệnh trong lập trình c trên win

chính (main frame) của ứng dụng

Tập tin Vidu1Doc.H : chứa các khai báo liên quan đến tài liệu

hộp hội thoại,…

CVidu1App, là lớp chương trình chính

I- TẠO GIAO DIỆN:

1.CÂU LỆNH TẠO VỊ TRÍ XUẤT HIỆN CỦA CỬA SỔ (viết trong miền

làm việc (lop)classview->chon lop cmainfrane->precreatewindow)

//BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) //{

// if( !CFrameWnd::PreCreateWindow(cs) )

// TODO: Modify the Window class or styles here by modifying

// the CREATESTRUCT cs

int xsize =GetSystemMetrics(SM_CXSCREEN);

int ysize =GetSystemMetrics(SM_CYSCREEN);

cs.cx=xsize*5/10;// nằm giữa màn hình

cs.cy=ysize*5/10;// nằm giữa màn hình

cs.x =(xsize-cs.cx )/2;

cs.y =(ysize-cs.cy )/2;

//return true;

Chú ý: thay vì những câu lệnh đã có sẵn trong chương trình ta ghi chép lại nên chúng ta để chúng nằm trong dấu 2 sẹt // nha

2 LOẠI BỎ MINIMIZE VÀ MAXIMIZE (viết trong miền làm việc

(lop)classview->chon lop cmainfrane->precreatewindow)

{

\\ chú thích: loại bỏ thu nhỏ phóng to

cs.style&=~(WS_MAXIMIZEBOX);

\\ chú thích: loại bỏ thu xuống thanh dưới

cs.style&=~(WS_MINIMIZEBOX);

//return true;

}

3.KHÔNG CHO THAY ĐỔI KÍCH THƯỚC CỬA SỔ LÀM VIỆC:

Trang 2

(viết trong miền làm việc classview->cmainfrane->precreatewindow)

{

cs.style&=~ WS_THICKFRAME;

//return true

}

4.TẠO CỬA SỔ CỰC ĐẠI KHI ỨNG DỤNG BẮT ĐẦU CHẠY:

(Vào classview->cmainfrane-> têndự ánApp->initialized)

Đổi thành:

=> m_pMainWnd->ShowWindow(SW_ SHOWMAXIMIZED);// tao cua so cuc dai khi ung dung bat dau chay.

5 Tạo hộp thoại:

B1: Vào ResourceView-> menu->tạo tên mục trên thanh menu

Vd: Bạn muốn tao menu thông báo thì trong caption bạn gõ: &Thongbao Khi đó kết quả hiển thị bây giờ là: Thongbao

Trong đó:& là để tạo phím tắt khi chạy chương trình ta có thể bấm fím tắt cho thao tác được nhanh hơn khi chọn menu thongbao ấy bằng

Chú ý:-Trong một menu không thể tạo phím tắt giống nhau, bạn muốn tạo phím tắt kí tự nào thì chỉ cần để “&” trước kí tự đó.

Vd :t&hongbao: thì khi chạy nhấn alt+H

pop-up để bỏ dấu check.

Thí dụ như: ID_thongbao

* Lưu ý:

- Lúc này bạn không được tạo menu con ở dưới thanh menu bạn vừa mới tạo.

- Để tạo menu con bạn kích lại vào pop-up, trên thanh menu sẽ xuất hiện menu trống để bạn tạo, bạn chỉ cần kích vào đó.

- Lúc này bạn phải điền đầy đủ thông tin:

+ Caption là:tên

Để tạo phím tắt cho menu :

-> Cách 1 : dùng kí tự «& » như trên

-> Cách 2 :tên\tctrl+kí tự

Vd :&thôngbao\tctrl+T

Kết quả xuất hiện bây giờ đó là : thôngbao ctrl+t

Trang 3

- Chú ý : Để cho phim tắt có hiệu lực bạn vào

Resources View->Accelerator-> IDR_MAINFRAME và tạo phím tắt ở đây.

+ ID : thì bạn đánh địa chỉ của menu vào

B2 :Vào View trên thanh công cụ-> classviewzard (hoặc Ctrl+W )

- Opject IDs:Chọn tên địa chỉ ID của menu vừa tạo

thay đổi tên thì bạn bấm ok (Dùng để tạo hộp thoại)

+ Chọn update_command_UI: làm cho câu lệnh vô hiệu lực, hoặc có hiệu lực.

pCmdUI -> Enable ( m_bWzd );

Nếu m_bWzd =TRUE thì menu trở nên hoạt động,

Nếu m_bWzd = FALSE có kết quả ngược lại.

- Chú ý: messager: chọn UPDATE_COMMAND_UI thì edit code của nó để vô hiệu hoặc có hiệu lực cho việc hiển thị bên ngoài giao diện còn ngược lại hầu hết thì ta đều chọn COMMAND

- Cú pháp tạo hộp thoại:

{

AfxMessageBox(“Thông báo", MB_YESNO);

// hiển thị chuỗi + cả 2 command yes and no để ta chọn

}

Vd:

AfxMessageBox(“bạn đã tạo thông báo thành công”,MB_OK);

6.Tạo thanh công cụ:

=>B1:Vào insert->resource->toolbar->new

- Lúc này bạn tạo thanh công cụ mới, bạn phải đặt tên địa chỉ cho thanh cộng cụ bạn vừa mới tạo bằng cách : kích chuột phải vào

IDR_TOOLBAR1-> vào propertise -> đổi tên

- Các nút công cụ bạn vừa tạo phải ghi địa chỉ ID cho nó bằng cách click chuột vào nó

Cách 2: ResourcesView->click chuột phải vào toolbar chọn insert

=>B2:Vào classview->chọn m_wndtooolbar

- Trong hàm protected bạn có thể thêm đối tượng ở hàm Ctoolbar vào bên dưới:

Ctoolbar tên_đối tượng;

Trang 4

Vd: Ctoolbar hi;

=>B3: Vào CmainFrame -> oncreated() đổi tên như bước2

Vd:copy đoạn mã và đổi tên cho phù hợp

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |

WS_VISIBLE | CBRS_TOP

| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY |

CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

TRACE0("Failed to create toolbar\n");

return -1; // fail to create

}

Lưu ý: - Bạn phải thay đổi các tên m_wndtoolbar => hi

Trong đó :hi là tên bạn tạo trong khai báo ở hàm ctoolbar

Và IDR_MAINFRAME phải đổi thành tên địa chỉ ID bạn đặt ở B1.

Khi việc đổi tên hoàn tất bạn có thể sắp xếp thanh công cụ bằng cách:

- Tìm đoạn mã sau:

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_wndToolBar);

Trong đó:

DockControlBar( CControlBar *pBar, UINT nDockBarID= 0);

nDockBarID : gtrị xác định vị trí thanh công cụ

 AFX_IDW_DOCKBAR_TOP : Toolbar xếp vào phía trên vùng client cửa sổ

 AFX_IDW_DOCKBAR_BOTTOM : Toolbar xếp vào phía dưới vùng client cửa sổ

 AFX_IDW_DOCKBAR_LEFT : Toolbar xếp vào phía bên trái vùng client cửa sổ

 AFX_IDW_DOCKBAR_RIGHT : Toolbar xếp vào phía bên phải vùng client cửa sổ

Vd:

hi.EnableDocking(CBRS_ALIGN_ANY);

Trang 5

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&hi,AFX_IDW_DOCKBAR_BOTTOM );

7.Thêm text vào nút toolbar :

Vào cMainfram->cú pháp này được viết trong Oncreate(…)

- Cú pháp:

SetButtonText ( int nIndex , LPCTSTR lpszText );

Xác định kích thước các nút trong toolbar và kíchước iMage SetSizes ( SIZE sizeButton , SIZE sizeImage );

Ví dụ:

hi.SetButtonText(0,_T(" mo" ));

hi.SetSizes(CSize (40,36),CSize (15,14));

Trong đó:

0 là vị trí nút cần thêm text

Hi : là tên thanh công cụ được tạo ở trên.

8.Tạo thanh trạng thái:

B1: vào fileview->source file->MainFrm.cpp

- Trong hàm “static UINT indicators[] =” bạn thêm thanh trạng thái mới Vd: ID_INDICATOR_TG,//do người dùng đặt tên

B2:khai báo vao resoure->string table-> string table ->chon hàm có

ID_INDICATOR_ rồi đặt tên cho no băng cách kích chuột phải ->new string->go tên

B2:Tạo hiển thị cho cho chỉ danh: khai báo ở phía dưới trong

MainFrm.cpp

void CMainFrame::OnUpdateStbarnew(CCmdUI* pCmdUI)

{

pCmdUI->Enable(true);

}

Trong đó: Stbarnew do người dùng đặt

B3:Vào fileview-> Header Files-> MainFrm.h

- Trong hàm protected gõ lệnh:

afx_msg void OnUpdateStbarnew(CCmdUI* pCmdUI);

B4: Trở lại bảng -> MainFrm.cpp:

- Trong hàm BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) gõ lệnh:

Trang 6

ON_UPDATE_COMMAND_UI(ID_INDICATOR_TG,OnUpdateStbarnew) B5: Nhấn F7 kiểm tra lỗi và nhấn F5 để chạy.

II- CÁC HÀM ĐỒ HỌA:

1.Tạo đường thẳng:

B1:Tạo menu hoặc thanh công cụ như đã trình bày ở trên.

B2:Vào view-> classwinzar.

B3:Chọn địa chỉ ID của nút công cụ vừa mới tạo ở thanh toollbar hoặc menu

->click vào command->ok->edit code và gõ lệnh:

C1:

- Cú pháp: CDC * pDC = GetDC();; // Khai báo thiết bị DC

ReleaseDC ( hWnd , hDC ); // Giải phóng DC

pDC -> LineTo (int X , int Y );

pDC -> MoveToEx (int X , int Y );

Vd: CDC*pDC=GetDC();

pDC->MoveTo(100,100);//tọa độ gốc

pDC->LineTo(200,200);//chiều dài hình vẽ

C2:

Khai báo:

POINT p,p1;

p.x=200 ;

p.y=200 ;

p1.x=100 ;

p1.y=100 ;

CDC*pDC=GetDC();

pDC->MoveTo(p1); //tọa độ gốc

pDC->LineTo(p); //chiều dài hình vẽ

2. Hình chữ nhật : ( viết tượng tự như ở các bước tạo đường thẳng)

=> Hình chữ nhật thường :

- Cú pháp :

pDC -> Rectangle (int upX , int upY , int lowX , int lowY );

upX , upY : góc trên bên trái

vd:

CDC*pDC=GetDC();

pDC -> Rectangle(200,200,400,300);

=> Hình chữ nhật vuông:

Trang 7

- Cú pháp:

pDC-> RoundRect (int x1, int y1, int x2, int y2, int x3, int y3)

vd : CDC*pDC=GetDC();

pDC-> RoundRect(200,200,400,300,50,50);

3.Hình elip ( viết tượng tự như ở các bước tạo đường thẳng)

- Cú pháp:

pDC-> Ellipse (int upX , int upY , int lowX , int lowY );

vd:

CDC*pDC=GetDC();

pDC->Ellipse(400,400,600,500);//(400,200,600,400)hình tròn

4.Vẽ Pie(Hình tròn Khuyết): ( viết tượng tự như ở các bước tạo đường thẳng)

- Cú pháp:

pDC-> pie (int upX , int upY , int lowX , int lowY, int Xs, int Ys, int Xe, int Ye);

upX , upY : góc trên bên trái

Xs, Ys: Điểm bắt đầu cung

Xe, Ye: Điểm kết thúc cung

Vd:

CDC*pDC=GetDC();

pDC->Pie(100,100,200,200,150,100,200,150);//

( 400,200,600,400,500,100,600,300) 5.Đường Liền Kề Nhau: ( viết tượng tự như ở các bước tạo đường thẳng)

- Cú pháp:

pDC-> Polyline(POINT pt, int n);

n : số lượng tọa độ

vd:

POINT pt[10];

{ int x;

int y;

}

Trang 8

pt[0].y=300;

pt[1].x=250;

pt[1].y=200;

pt[2].x=300;

pt[2].y=300;

pt[3].x=350;

pt[3].y=200;

pt[4].x=400;

pt[4].y=300;

CDC*pDC=GetDC();

pDC->Polyline(pt,5);

6.Tạo thuộc tính bút vẽ : ( viết tượng tự như ở các bước tạo đường thẳng)

- Cú pháp :

CPen pen (int style , int width, COLOREF color );

Style : kiểu bút vẽ và có các giá trị:

Color: RGB(R, G, B)

CPen *pPen = pDC->SelectObject(&pen) //thiết lập

Vd:

CPen pen(PS_SOLID,3,RGB(19,211,65));

CPen*pPen = pDC->SelectObject(&pen) ;

- Chú ý: Phải đặt trước lệnh tạo đồ họa.

7.Tạo chổi quét ( Tạo màu nền)// (viết tượng tự như ở các bước tạo đường

thẳng)

-Cú pháp:

Cbrush Brush (COLOREF color )

Color: RGB( R , G , B )

Thiết lập chổi quét :

CBrush *pBrush = pDC->SelectObject (&Brush)

- Chú ý: Phải đặt trước lệnh tạo hình vẽ ý

Vd: CBrush Brush(RGB(0,255,0));

Trang 9

CBrush*pBrush = pDC->SelectObject(&Brush);

- HS_BDIAGONAL:

- HS_CROSS:

- HS_DIAGCROSS:

- HS_FDIAGONAL:

- HS_HORIZONTAL:

- HS_VERTICAL:

Vd:

CBrush Brush(HS_VERTICAL,RGB(0,250,0));

CBrush*pBrush = pDC->SelectObject(&Brush);

8.Tạo text lên cửa sổ:( tương tự)

- Cú pháp:

pDC -> TextOut( x, y, string, strLength);

pDC-> SetTextAlign(TA_CENTER) // hàm thiết lập

Trong đó:

pDC là device context của cửa sổ cần xuất.

x, y điểm bắt đầu của chuỗi ký tự trong client

string là một con trỏ trỏ đốn một chuỗi ký tự

strLength là số ký tự trong chỗi cần xuất.

Ví dụ:

void CMainFrame::Ontraitim()

{

// TODO: Add your command handler code here

CDC*pDC=GetDC();

CString str("Ban co mot trai tim tinh khuyet");

pDC->TextOut(400,100,str, str.GetLength());

pDC-> SetTextAlign(TA_CENTER) ; }

9 Thiết lập màu chữ : (Phải đặt trước lệnh tạo text.)

pDC-> SetTextColor(COLOREF color);

Vd:

CDC*pDC=GetDC();

pDC-> SetTextColor(RGB(250,0,0));

Trang 10

 Thiết lập màu nền (Phải đặt trước lệnh tạo text.)

pDC-> SetBkColor(COLOREF color)

Vd:

CDC*pDC=GetDC();

pDC-> SetBkColor(RGB(250,0,0));

VD:Tạo hình người viết trong mainfrm.cpp:

CDC*pDC=GetDC();

pDC->Ellipse(400,100,500,200);

pDC -> Rectangle(440,200,460,230);//co pDC -> Rectangle(370,228,530,400);//than pDC->Ellipse(423,125,443,133);

pDC->Ellipse(463,125,483,133);//MAT

pDC->MoveTo(453,140);

pDC->LineTo(444,155);

pDC->MoveTo(453,140);//MUI pDC->LineTo(462,155);

pDC->MoveTo(444,155);

pDC->LineTo(462,155);

pDC->MoveTo(453,180);//MIENG pDC->LineTo(428,170);

pDC->MoveTo(453,180);

pDC->LineTo(473,170);

pDC->MoveTo(370,228);

pDC->LineTo(290,420);

pDC->MoveTo(370,290);//taytrai pDC->LineTo(300,420);

pDC->MoveTo(290,420);

pDC->LineTo(302,420);

pDC->MoveTo(530,230);

pDC->LineTo(610,420);

pDC->MoveTo(530,290);//tayphai pDC->LineTo(600,420);

pDC->MoveTo(600,420);

pDC->LineTo(611,420);

Trang 11

pDC->MoveTo(370,400);

pDC->LineTo(355,600);

pDC->MoveTo(450,450);

pDC->LineTo(375,600);//chan pDC->MoveTo(530,400);

pDC->LineTo(545,600);

pDC->MoveTo(450,450);

pDC->LineTo(525,600);

pDC->MoveTo(355,600);

pDC->LineTo(375,600);

pDC->MoveTo(525,600);

pDC->LineTo(545,600);

CBrush Brush(RGB(50,250,0));

CBrush *pBrush = pDC->SelectObject (&Brush);

pDC->MoveTo(370,385);

pDC->LineTo(530,385);

pDC -> Rectangle(440,385,460,400);//thaclung

pDC-> SetTextColor(RGB(0,0,0));

pDC-> SetBkColor(RGB(250,0,0));

CString str("CHAO CAC BAN!!");// tao text pDC->TextOut(400,80,str, str.GetLength());

pDC-> SetTextAlign(TA_CENTER) ; 10.Thuật vẽ Bitmap(chèn ảnh):

B1:tạo menu hoặc tool

B2:Tạo nguồn Bitmap trong tập tài nguyên có đuôi rc bằng cách:

Chọn file ->open->chọn đuôi rc(trong save as chọn text)->open->gõ lệnh tạo nguồn vào hình cần chèn

Vd: ID_BITMAP BITMAP "C:\HINH\h.bmp"

ID do người dùng đặt

B3:vào classwinzard->chọn địa chỉ cần thực hiện(lớp cmainfram)

->command(kích đôi)->edit code

B4:gõ lệnh:

CBitmap bm;//khai báo

bm.LoadBitmap(ID_BITMAP);//nạp bitmap từ tài nguyên.

CDC*pDC=GetDC();

CDC mDC;

mDC.CreateCompatibleDC(pDC); //Đạt được DC của bộ nhớ sẽ chứa bitmap

Trang 12

mDC.SelectObject(bm);// Chọn bitmap trong device context của

bộ nhớ.

BITMAP TT;//khai báo bm.GetObject(sizeof(TT),&TT);//nhập thông tin của bitmap pDC->BitBlt (100,300,TT.bmWidth,TT.bmHeight,&mDC,0,0,SRCCOPY);

//Sao chép bitmap từ DC của bộ nhớ sang DC của cửa sổ.

-Trong đó: bm,TT , m DC:do người lập trình đặt.

B5: vào resouce.h định nghĩa.

#define ID_BITMAP 32804 //số này không trùng với số

ở phía trên.

B6:chạy chương trình

11.Tạo font cho text:

B1: tạo ra text đã học ở trên

B2:thiết lập font:được viết trên text

CFont Font;//do ngườ lập trình đặt tên

B3: gọi

Font CreateFont để tạo ra font có thuộc tính xác định

Font.CreateFont(int Height, //kích thước điểm

0, 0, 0, FW_NORMAL, // Độ dầy, có thể là FW_BOLD

0, // nếu 1 nghiêng

0, // Nếu 1 gạch dưới

0, //nếu 1 gạch ngang 0,0, 0, 0,0,“VNI-Times”); //kiểu chữ

 B4: Gọi SelectObject() cài đặt Font vào vùng client

Font.CreateFont(40,0,0,0,FW_BOLD,0,1,0,0,0,0,0,0,"VNI-Times"); CFont *pFont = (CFont *) pDC->SelectObject(&Font);

SetFont(pFont);//thiết lập

Vd: void CMainFrame::Onhi()

{

// TODO: Add your command handler code here CDC*pDC=GetDC();

CFont f;

f.CreateFont(40,0,0,0,FW_BOLD,0,1,0,0,0,0,0,0,"VNI-Times"); CFont *pFont = (CFont *) pDC->SelectObject(&f);

Trang 13

CString str("bạn đã tạo font chữ thành công!!");

pDC->TextOut(400,300,str, str.GetLength());

pDC-> SetTextAlign(TA_CENTER) ; }

III-HÀM XỮ LÝ THƠNG ĐIỆP CHUỘT:

1).Tạo hình khi nhấn chuột:

B1:tạo nút tool hoặc menu

B2: vào classwinzard chọn lớp view, chọn thơng điệp chuột trong messages

B3:khai báo biến bằng cách kích chuột phải vào lớp view chọn Add Member

Varible…gõ kiểu và biến do người lập trình đặt.

Vd:tạo hình chữ nhật và đường thẳng

B1:trong thơng điệp chuột OnLButtonDown

void CBaitap2View::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default

if (hinh==1)

{

if (lc==1) {

pl.x=point.x;

pl.y=point.y ; lc=2;

} else

{ CDC*pDC=GetDC();

CBrush Brush (RGB(200,100,0));

CBrush *pBrush = pDC->SelectObject (&Brush);

pDC->Rectangle(pl.x,pl.y,point.x,point.y);

lc=1;

} }

if (hinh==2)

{

if (lc==1) {

pl.x=point.x;

Ngày đăng: 05/07/2014, 23:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w