CListCtrl 

Đóng gói chức năng của Điều khiển dạng xem danh sách, hiển thị một tập hợp các mục, mỗi mục bao gồm một biểu tượng (từ danh sách hình ảnh) và nhãn. Nó được đại diện bởi lớp CListCtrl . Điều khiển danh sách bao gồm việc sử dụng một trong bốn dạng xem để hiển thị danh sách các mục.

  • Biểu tượng
  • Biểu tượng nhỏ
  • Danh sách
  • Báo cáo

Đây là danh sách các phương thức trong lớp CListCtrl .

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

Bước 1 – Xóa dòng TODO và kéo một List Control.

Bước 2 – Trong Cửa sổ Thuộc tính, bạn sẽ thấy các tùy chọn khác nhau trong danh sách thả xuống Chế độ xem.

CListCtrl

Bước 3 – Chọn Báo cáo từ trường Xem.

Bước 4 – Thêm biến điều khiển m_listCtrl cho Điều khiển danh sách.

CListCtrl

Bước 5 – Khởi tạo List Control trong OnInitDialog()

BOOL CMFCListControlDlg::OnInitDialog() {
   CDialogEx::OnInitDialog();
 
   // Set the icon for this dialog. The framework does this automatically
   // when the application's main window is not a dialog
   SetIcon(m_hIcon, TRUE);         // Set big icon
   SetIcon(m_hIcon, FALSE);         // Set small icon

   // TODO: Add extra initialization here
   // Ask Mfc to create/insert a column
   m_listCtrl.InsertColumn( 
      0,              // Rank/order of item 
      L"ID",          // Caption for this header 
      LVCFMT_LEFT,    // Relative position of items under header 
      100);           // Width of items under header
		
   m_listCtrl.InsertColumn(1, L"Name", LVCFMT_CENTER, 80);
   m_listCtrl.InsertColumn(2, L"Age", LVCFMT_LEFT, 100);
   m_listCtrl.InsertColumn(3, L"Address", LVCFMT_LEFT, 80);
   
   int nItem;

   nItem = m_listCtrl.InsertItem(0, L"1");
   m_listCtrl.SetItemText(nItem, 1, L"Mark");
   m_listCtrl.SetItemText(nItem, 2, L"45");
   m_listCtrl.SetItemText(nItem, 3, L"Address 1");
   
   nItem = m_listCtrl.InsertItem(0, L"2");
   m_listCtrl.SetItemText(nItem, 1, L"Allan");
   m_listCtrl.SetItemText(nItem, 2, L"29");
   m_listCtrl.SetItemText(nItem, 3, L"Address 2");

   nItem = m_listCtrl.InsertItem(0, L"3");
   m_listCtrl.SetItemText(nItem, 1, L"Ajay");
   m_listCtrl.SetItemText(nItem, 2, L"37");
   m_listCtrl.SetItemText(nItem, 3, L"Address 3");

   return TRUE; // return TRUE unless you set the focus to a control
}

Bước 6 – Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau.

CListCtrl

MFC – Tin nhắn & Sự kiện

Một ứng dụng được làm bằng các đối tượng khác nhau. Hầu hết thời gian, nhiều ứng dụng đang chạy trên máy tính và hệ điều hành liên tục được yêu cầu thực hiện một số nhiệm vụ. Bởi vì có thể có quá nhiều yêu cầu được đưa ra một cách không thể đoán trước, hệ điều hành để cho các đối tượng tự xác định những gì họ muốn, khi nào họ muốn và hành vi hoặc kết quả mà họ mong đợi.

Tng quan

  • Hệ điều hành Microsoft Windows không thể dự đoán loại yêu cầu nào mà một đối tượng sẽ cần được xử lý và loại nhiệm vụ nào mà đối tượng khác sẽ cần.
  • Để quản lý tất cả các nhiệm vụ và yêu cầu này, các đối tượng sẽ gửi tin nhắn.
  • Mỗi đối tượng có trách nhiệm quyết định gửi tin nhắn nào và khi nào.
  • Để gửi một tin nhắn, một điều khiển phải tạo một sự kiện.
  • Để phân biệt giữa hai loại này, tên của thư thường bắt đầu bằng WM_ viết tắt của Window Message.
  • Tên của một sự kiện thường bắt đầu bằng Bật cho biết một hành động.
  • Sự kiện là hành động gửi tin nhắn.

Bn đồ tin nhn

Vì Windows là một hệ điều hành hướng thông báo nên phần lớn lập trình cho môi trường Windows liên quan đến việc xử lý thông báo. Mỗi khi một sự kiện như gõ phím hoặc nhấp chuột xảy ra, một thông báo sẽ được gửi đến ứng dụng, ứng dụng này sau đó phải xử lý sự kiện đó.

  • Để trình biên dịch quản lý các thông báo, chúng nên được đưa vào định nghĩa lớp.
  • Macro DECLARE_MESSAGE_MAP phải được cung cấp ở cuối định nghĩa lớp như được hiển thị trong mã sau đây.
class CMainFrame : public CFrameWnd {
   public:
      CMainFrame();
   protected:
      DECLARE_MESSAGE_MAP()
};
  • Các thông báo thực tế phải được liệt kê ngay phía trên dòng DECLARE_MESSAGE_MAP.
  • Để triển khai các thông báo, bạn cần tạo một bảng các thông báo mà chương trình của bạn đang sử dụng.
  • Bảng này sử dụng hai macro phân định;
  • Nó bắt đầu bằng một BEGIN_MESSAGE_MAP và kết thúc bằng một macro END_MESSAGE_MAP .
  • Macro BEGIN_MESSAGE_MAP nhận hai đối số, tên lớp của bạn và lớp MFC mà bạn lấy từ lớp của mình như minh họa trong đoạn mã sau.
#include <afxwin.h>
class CMainFrame : public CFrameWnd {
   public:
      CMainFrame();
   protected:
      DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {

   // Create the window's frame
   Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
                                      CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
   public:
      BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
BOOL CMessagesApp::InitInstance(){
   m_pMainWnd = new CMainFrame;
   m_pMainWnd->ShowWindow(SW_SHOW);
   m_pMainWnd->UpdateWindow();
   return TRUE;
}
CMessagesApp theApp;

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.

CListCtrl

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

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

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

Bước 4 – Chúng tôi cần thêm một tệp nguồn mới.

Bước 5 – 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 6 – Trong phần Mẫu, nhấp vào Tệp C++ (.cpp).

CListCtrl

Bước 7 – Nhấp vào Thêm để tiếp tục.

Bước 8 – Bây giờ, thêm đoạn mã sau vào tệp *.cpp.

#include <afxwin.h>
class CMainFrame : public CFrameWnd {
   public:
      CMainFrame();
   protected:
      DECLARE_MESSAGE_MAP()
};

CMainFrame::CMainFrame() {
   // Create the window's frame
   Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
      CRect(120, 100, 700, 480), NULL);
}

class CMessagesApp : public CWinApp {
   public:
      BOOL InitInstance();
};

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
END_MESSAGE_MAP()
BOOL CMessagesApp::InitInstance() {
   m_pMainWnd = new CMainFrame;
   m_pMainWnd->ShowWindow(SW_SHOW);
   m_pMainWnd->UpdateWindow();
   return TRUE;
}
CMessagesApp theApp;

Tin nhn Windows

Có nhiều loại thông báo Windows khác nhau như tạo cửa sổ, hiển thị cửa sổ, v.v. Dưới đây là một số thông báo Windows thường được sử dụng.

Dưới đây là các loại thông báo Window khác nhau.

Chúng ta hãy xem xét một ví dụ đơn giản về việc tạo cửa sổ.

WM_CREATE − Khi một đối tượng, được gọi là cửa sổ, được tạo, khung tạo đối tượng sẽ gửi một thông báo được xác định là ON_WM_CREATE .

Bước 1 − Để tạo ON_WM_CREATE, hãy thêm afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); trước DECLARE_MESSAGE_MAP() như hình bên dưới.

class CMainFrame : public CFrameWnd {
   public:
      CMainFrame();
   protected:
      afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
      DECLARE_MESSAGE_MAP()
};

Bước 2 – Thêm ON_WM_CREATE() sau BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) và trước END_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
   ON_WM_CREATE()
END_MESSAGE_MAP()

Bước 3 – Đây là Triển khai OnCreate()

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
   // Call the base class to create the window
   if (CFrameWnd::OnCreate(lpCreateStruct) == 0) {

      // If the window was successfully created, let the user know
      MessageBox(L"The window has been created!!!");
      // Since the window was successfully created, return 0
      return 0;
   }
   // Otherwise, return -1
   return -1;
}

Bước 4 – Bây giờ, tệp *.cpp của bạn sẽ trông giống như được minh họa trong đoạn mã sau.

#include <afxwin.h>
class CMainFrame : public CFrameWnd {
   public:
      CMainFrame();
   protected:
      afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
      DECLARE_MESSAGE_MAP()
};
CMainFrame::CMainFrame() {

   // Create the window's frame
   Create(NULL, L"MFC Messages Demo", WS_OVERLAPPEDWINDOW,
      CRect(120, 100, 700, 480), NULL);
}
class CMessagesApp : public CWinApp {
   public:
      BOOL InitInstance();
};
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
   ON_WM_CREATE()
END_MESSAGE_MAP()
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
   // Call the base class to create the window
   if (CFrameWnd::OnCreate(lpCreateStruct) == 0) {
      // If the window was successfully created, let the user know
      MessageBox(L"The window has been created!!!");
      // Since the window was successfully created, return 0
      return 0;
   }
   // Otherwise, return -1
   return -1;
}
BOOL CMessagesApp::InitInstance() { 
   m_pMainWnd = new CMainFrame;
   m_pMainWnd -> ShowWindow(SW_SHOW);
   m_pMainWnd -> UpdateWindow();
   return TRUE;
}
CMessagesApp theApp;

Bước 5 – Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy đầu ra sau.

CListCtrl

Bước 6 – Khi bạn nhấp vào OK, nó sẽ hiển thị cửa sổ chính.

CListCtrl

Thông báo lệnh (xem thêm)

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