mfc

Trong chương này, chúng tôi sẽ đề cập đến các nguyên tắc cơ bản của Windows. Để tạo một chương trình, còn được gọi là ứng dụng, bạn lấy một lớp từ CWinApp của MFC. CWinApp là viết tắt của Class for a Windows Application.

Chúng ta hãy xem xét một ví dụ đơn giản bằng cách tạo một dự án Win32 mới.

Bước 1 – Mở Visual studio và nhấp vào tùy chọn menu Tệp → Mới → Dự án.

Bước 2 – Bây giờ bạn có thể thấy hộp thoại Dự án mới.

mfc

Bước 3 – Từ ngăn bên trái, chọn Mẫu → Visual C++ → Win32.

Bước 4 – Trong ngăn giữa, chọn Dự án Win32.

Bước 5 – Nhập tên dự án ‘MFCWindowDemo’ vào trường Tên và nhấp vào OK để tiếp tục. Bạn sẽ thấy hộp thoại sau.

mfc

Bước 6 – Nhấp vào Tiếp theo.

mfc

Bước 7 – Chọn các tùy chọn như được hiển thị trong hộp thoại ở trên và nhấp vào Kết thúc.

mfc

Bước 8 – Một dự án trống được tạo.

Bước 9 – Để biến nó thành dự án MFC, nhấp chuột phải vào dự án và chọn Thuộc tính.

mfc

Bước 10 – Trong phần bên trái, nhấp vào Thuộc tính cấu hình → Chung.

Bước 11 – Chọn tùy chọn Use MFC in Shared DLL trong phần Project Defaults và nhấp vào OK.

Bước 12 – Thêm tệp nguồn mới.

Bước 13 – Nhấp chuột phải vào Dự án của bạn và chọn Thêm → Mục mới…

Bước 14 – Trong phần Mẫu, nhấp vào Tệp C++ (.cpp).

mfc

Bước 15 – Đặt Tên là Ví dụ và nhấp vào Thêm.

To ca s

Bất kỳ ứng dụng nào cũng có hai phần chính –

  • Lớp
  • Khung hoặc Cửa sổ

Hãy để chúng tôi tạo một cửa sổ bằng các bước sau –

Bước 1 – Để tạo một ứng dụng, chúng ta cần lấy một lớp từ CWinApp của MFC.

#include
class CExample : public CWinApp {
   BOOL InitInstance() {
      return TRUE;
   }
};

Bước 2 – Chúng tôi cũng cần một khung/cửa sổ để hiển thị nội dung của ứng dụng.

Bước 3 – Đối với điều này, chúng ta cần thêm một lớp khác và dẫn xuất nó từ lớp CFrameWnd của MFC và triển khai hàm tạo của nó và gọi phương thức Create(), phương thức này sẽ tạo một khung/cửa sổ như được hiển thị trong đoạn mã sau.

class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"));
      }
};

Bước 4 – Như bạn có thể thấy rằng phương thức Create() cần hai tham số, tên của lớp, sẽ được truyền dưới dạng NULL và tên của cửa sổ, là chuỗi sẽ được hiển thị trên thanh tiêu đề.

Ca s chính

Sau khi tạo một cửa sổ, để ứng dụng sử dụng nó, bạn có thể sử dụng một con trỏ để chỉ ra lớp được sử dụng để tạo cửa sổ. Trong trường hợp này, con trỏ sẽ là CFrameWnd. Để sử dụng cửa sổ khung, hãy gán con trỏ của nó cho biến thành viên CWinThread::m_pMainWnd. Điều này được thực hiện trong quá trình triển khai InitInstance() của ứng dụng của bạn.

Bước 1 – Đây là cách triển khai InitInstance() trong lớp CExample.

class CExample : public CWinApp {
   BOOL InitInstance() {
      CMyFrame *Frame = new CMyFrame();  m_pMainWnd = Frame;
      
      Frame->ShowWindow(SW_NORMAL);
      Frame->UpdateWindow();
      
      return TRUE;
   }
};

Bước 2 – Sau đây là phần triển khai hoàn chỉnh của tệp Example.cpp

#include <afxwin.h>

class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"));
      }
};

class CExample : public CWinApp {
   BOOL InitInstance() {
      CMyFrame *Frame = new CMyFrame();
      m_pMainWnd = Frame;
      
      Frame->ShowWindow(SW_NORMAL);
      Frame->UpdateWindow();
      
      return TRUE;
   }
};

CExample theApp;

Bước 3 – Khi chúng tôi chạy ứng dụng trên, cửa sổ sau sẽ được tạo.

mfc

Kiu ca s

Kiểu Windows là các đặc điểm kiểm soát các tính năng như giao diện cửa sổ, đường viền, trạng thái thu nhỏ hoặc phóng to hoặc các trạng thái thay đổi kích thước khác, v.v.

Sau đây là danh sách các kiểu mà bạn có thể sử dụng khi tạo Cửa sổ.

Bước 1 – Chúng ta hãy xem xét một ví dụ đơn giản trong đó chúng ta sẽ thêm một số kiểu dáng. Sau khi tạo một cửa sổ, để hiển thị cho người dùng, chúng ta có thể áp dụng kiểu WS_VISIBLE cho nó và ngoài ra, chúng ta cũng sẽ thêm kiểu WS_OVERLAPPED. Đây là một triển khai

class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"), WS_VISIBLE | WS_OVERLAPPED);
      }
};

Bước 2 – Khi bạn chạy ứng dụng này, cửa sổ sau sẽ được tạo.

mfc

Bây giờ bạn có thể thấy rằng các tùy chọn thu nhỏ, tối đa hóa và đóng không còn xuất hiện nữa.

V trí ca s

Để xác định vị trí những thứ được hiển thị trên màn hình, máy tính sử dụng một hệ tọa độ tương tự như hệ tọa độ Descartes, nhưng gốc tọa độ nằm ở góc trên cùng bên trái của màn hình. Sử dụng hệ tọa độ này, bất kỳ điểm nào cũng có thể được định vị bằng khoảng cách từ góc trên cùng bên trái của màn hình theo trục ngang và trục dọc. Thư viện Win32 cung cấp một cấu trúc gọi là POINT được định nghĩa như sau

typedef struct tagPOINT {
   LONG x;
   LONG y;
} POINT;
  • Biến thành viên ‘x’ là khoảng cách từ viền trái của màn hình đến điểm.
  • Biến ‘y’ biểu thị khoảng cách từ viền trên cùng của màn hình đến điểm.
  • Bên cạnh cấu trúc POINT của Win32, thư viện Microsoft Foundation Class (MFC) cung cấp lớp CPoint.
  • Điều này cung cấp chức năng tương tự như cấu trúc POINT. Là một lớp C++, nó bổ sung thêm nhiều chức năng cần thiết để định vị một điểm. Nó cung cấp hai hàm tạo.
CPoint();
CPoint(int X, int Y);

Kích thước ca s

Trong khi một điểm được sử dụng để định vị một đối tượng trên màn hình, mỗi cửa sổ có một kích thước. Kích thước cung cấp hai biện pháp liên quan đến một đối tượng.

  • Chiều rộng của một đối tượng.
  • Chiều cao của một đối tượng.

Thư viện Win32 sử dụng cấu trúc SIZE được định nghĩa như sau –

typedef struct tagSIZE {
   int cx;
   int cy;
} SIZE;

Bên cạnh cấu trúc SIZE của Win32, MFC cung cấp lớp CSize. Lớp này có cùng chức năng như SIZE nhưng bổ sung thêm các tính năng của lớp C++. Nó cung cấp năm hàm tạo cho phép bạn tạo một biến kích thước theo bất kỳ cách nào bạn chọn.

CSize();
CSize(int initCX, int initCY);
CSize(SIZE initSize);
CSize(POINT initPt);
CSize(DWORD dwSize);

Kích thước ca s

Khi một Cửa sổ hiển thị, nó có thể được xác định trên màn hình theo vị trí của nó so với các đường viền của màn hình. Một cửa sổ cũng có thể được xác định bởi chiều rộng và chiều cao của nó. Các đặc điểm này được chỉ định hoặc kiểm soát bởi đối số rect của phương thức Create() . Đối số này là một hình chữ nhật có thể được tạo thông qua cấu trúc Win32 RECT.

typedef struct _RECT {
   LONG left;
   LONG top;
   LONG right;
   LONG bottom;
} RECT, *PRECT;

Bên cạnh cấu trúc RECT của Win32 , MFC cung cấp lớp CRect có các hàm tạo sau

CRect();
CRect(int l, int t, int r, int b);
CRect(const RECT& srcRect);
CRect(LPCRECT lpSrcRect);
CRect(POINT point, SIZE size);
CRect(POINT topLeft, POINT bottomRight);

Chúng ta hãy xem xét một ví dụ đơn giản trong đó chúng ta sẽ chỉ định vị trí và kích thước của cửa sổ

class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"), WS_SYSMENU, CRect(90, 120, 
            550, 480));
      }
};

Khi bạn chạy ứng dụng này, cửa sổ sau được tạo ở góc trên cùng bên trái của màn hình như được chỉ định trong hàm tạo CRect trong hai tham số đầu tiên. Hai tham số cuối cùng là kích thước của Window.

mfc

Windows cha m

Trong thế giới thực, nhiều ứng dụng được tạo từ các Windows khác nhau. Khi một ứng dụng sử dụng nhiều Windows khác nhau, hầu hết các đối tượng phụ thuộc vào một đối tượng cụ thể. Đó có thể là Cửa sổ đầu tiên được tạo hoặc một cửa sổ khác mà bạn đã chỉ định. Cửa sổ như vậy được gọi là Cửa sổ mẹ . Tất cả các cửa sổ khác phụ thuộc trực tiếp hoặc gián tiếp vào nó.

  • Nếu Cửa sổ bạn đang tạo phụ thuộc vào cửa sổ khác, bạn có thể chỉ định rằng cửa sổ đó có cửa sổ cha.
  • Điều này được thực hiện với đối số pParentWnd của phương thức CFrameWnd::Create().
  • Nếu Cửa sổ không có cha, hãy chuyển đối số bằng giá trị NULL.

Chúng ta hãy xem xét một ví dụ chỉ có một Cửa sổ và không có Cửa sổ mẹ nào, vì vậy chúng ta sẽ chuyển đối số có giá trị NULL như được hiển thị trong đoạn mã sau –

class CMyFrame : public CFrameWnd {
   public:
      CMyFrame() {
         Create(NULL, _T("MFC Application Tutorial"), WS_SYSMENU, 
            CRect(90, 120, 550, 480), NULL);
      }
};

Khi bạn chạy ứng dụng trên, bạn sẽ thấy kết quả tương tự.

mfc

MFC – Hộp Thoại (xem thêm)

Để lại một bình luận