Tạo các điều khiển ActiveX của riêng bạn

1. Giới thiệu

yếu tố kiểm soát ActveX – một tập tin với phần mở rộng OCX (ví dụ, MyButton.OCX), mà bạn có thể sử dụng trong ứng dụng của bạn Visual C ++. Visual C ++ và ngôn ngữ lập trình trực quan khác cho phép bạn kích hoạt các điều khiển ActiveX trong chương trình và sử dụng nó trong cùng một cách như kiểm soát ++ Visual C chuẩn. Bạn đặt điều khiển ActiveX trong hộp thoại, thiết lập thuộc tính của nó và liên kết mã với các sự kiện của nó. Sau khi bạn đã tạo điều khiển ActiveX của riêng mình, bạn có thể chuyển nó cho các lập trình viên khác có thể nhập nó vào các chương trình của họ.

Bởi vì phần mở rộng tệp điều khiển ActiveX là .OSX, đôi khi điều khiển ActiveX được gọi là các phần tử OSX. Trong chương này, bạn sẽ phát triển kiểm soát của bạn riêng ActiveX – MyClock.OSKH, thực hiện nhiệm vụ của màn hình hiển thị thời gian hiện tại. Khi các lập trình viên đặt các điều khiển MyClock.OXX trong các hình thức hoặc trong hộp thoại, MyClock. OCX sẽ liên tục hiển thị thời gian hiện tại.

 

2. Tạo một dự án

Để tạo một dự án điều khiển MyClock.OCX:

1) Chọn Mới từ trình đơn Tệp. Đáp lại, Visual C ++ hiển thị hộp thoại Mới. 2) Chọn tab Dự án của hộp thoại Mới. 3) Chọn MFC ActiveX ControlWizard từ danh sách các loại dự án 4) Kiểu MyClock trong cửa sổ Tên Dự án. 5) Nhấp vào nút nằm ở phía bên phải của cửa sổ Vị trí và chọn thư mục cho dự án. 6) Nhấp vào nút OK. Để đáp ứng, Visual C ++ sẽ hiển thị cửa sổ MFC ActiveX ControlWizard Bước 1 trong 2 Trong cửa sổ ActiveX ControlWizard Bước 1, để tất cả các thiết lập ở trạng thái mặc định và nhấp vào nút Tiếp theo. Trong ActiveX ControlWizard Bước 2, để tất cả các thiết lập ở trạng thái mặc định và nhấp vào nút Finish. Đáp lại, Visual C ++ hiển thị hộp thoại New Project Information. Nhấn OK trong hộp thoại New Project Information và chọn Set Active Configuration từ thực đơn Build. Đáp lại, Visual C ++ hiển thị hộp thoại Set Active Project Configuration. Chọn MyClock – Win32 Release trong hộp thoại Set Active Project Configuration và kích OK. Đó là tất cả! Bạn đã hoàn thành việc tạo ra các dự án tập tin và các wireframes của MyClock ActiveX kiểm soát các tập tin.

 

3. Thiết lập biểu tượng công cụ MyClock

Biểu tượng công cụ MyClock hiển thị các ký tự OCX. Bạn cần phải cấu hình kiểm soát MyClock để biểu tượng công cụ của nó là một đồ họa đồng hồ. Để cấu hình biểu tượng công cụ MyClock, bạn phải chỉnh sửa bitmap IDB_MYCLOCK. Hình ảnh này được tạo ra bởi Visual C ++. Để hiển thị bitmap IDB_MYCLOCK trong chế độ thiết kế, hãy thực hiện theo các bước sau:

1) Chọn thẻ ResourceView trong cửa sổ Workspace Workspace, mở rộng tài nguyên MyClock, mở rộng mục Bitmap, và nhấp đúp vào IDB_MYCLOCK. Đáp lại, Visual C ++ sẽ hiển thị bitmap IDB_MYCLOCK trong chế độ thiết kế. 2) Sử dụng các công cụ trực quan của Visual C ++, thay thế hình ảnh raster IDB_MYCLOCK của các chữ cái OCX với bản vẽ của đồng hồ đơn giản nhất (vòng tròn và hai dòng như các mũi tên).

 

 

4. Vẽ trong kiểm soát MyClock

Trong khi điều khiển MyClock hiển thị một hình elip. Bạn cần MyClock để hiển thị thời gian hiện tại, vì vậy bạn cần phải viết mã thích hợp: Mở tập tin MyClockCtl.cpp. Tệp MyClockCtl.cpp là tệp thực hiện cho kiểm soát MuClock mà bạn đã tạo cho Visual C ++; Trong tệp này, bạn sẽ viết mã của bạn để cấu hình MyClock. Tìm hàm OnDraw () trong MyClockCtl.cpp và viết đoạn mã sau:

VOID CMYCLOCKCTRL :: ONDRAW (CDC * PDC, CONST CRECT & RCBOUNDS, CONST CRECT & RCINVALID) { // TODO: THAY THẾ MÃ SAU BẰNG BẢN VẼ CỦA RIÊNG BẠN // CODE. / / ĐỔ ĐIỀU KHIỂN BẰNG MÀU ĐÃ CHỌN. PDC-> FILLRECT (RCBOUNDS, CBRUSH :: FROMHANDLE ((HBRUSH) GETSTOCKOBJECT (WHITE_BRUSH)))); CHAR CURRENTTIME [30]; STRUCT TM * NEWTIME; DÀI LTIME; // LẤY THỜI GIAN HIỆN TẠI THỜI GIAN (& LTIME); NEWTIME = LOCALTIME (& LTIME); // CHUYỂN ĐỔI THỜI GIAN THÀNH MỘT CHUỖI. STRCPY (CURRENTTIME, ASCTIME (NEWTIME)); / / HOÀN THÀNH DÒNG VỚI MỘT KÝ TỰ KHÔNG GIAN. CURRENTTIME [24] = ”; // THÊM MỘT CHUỖI HẠN CHẾ KÝ TỰ. CURRENTTIME [25] = 0; // IN THỜI GIAN HIỆN TẠI PDC-> EXTTEXTOUT (RCBOUNDS.LEFT, RCBOUNDS.TOP, ETO_CLIPPED, RCBOUNDS, CURRENTTIME, STRLEN (CURRENTTIME), NULL); }
 

 

5. Hiển thị thời gian hiện tại ở chế độ liên tục

Để hiển thị thời gian liên tục, bạn cần phải thực hiện theo các bước sau: 1) Viết mã lệnh đặt một bộ đếm thời gian với khoảng thời gian 1000 millisecond cho điều khiển MyClock. 2) Liên kết mã với sự kiện WM_TIMER của điều khiển MyClock. Sau khi thiết lập bộ định thời mỗi 1000 mili giây (mỗi giây), Windows sẽ gửi một thông báo WM_TIMER đến bộ điều khiển MyClock, để đáp ứng mã mà bạn liên kết với sự kiện điều khiển này sẽ được thực hiện. Mã này sẽ đơn giản xuất ra thời gian hiện tại, vì vậy giá trị thời gian sẽ được cập nhật liên tục. Bộ đếm thời gian phải được cài đặt ngay sau khi tạo điều khiển, vì vậy bạn cần kết hợp mã để đặt thời gian cho sự kiện WM_CREATE của điều khiển: Hiển thị hộp thoại ClassWizard bằng cách chọn ClassWizard từ trình đơn View. Trên trang Bản đồ Thư, hãy chọn sự kiện sau:

Tên Lớp: CMyClockCtrl Tổ Chức ID: CMyClockCtrl Thư: WM_CREATE

Nhấp vào nút Thêm chức năng. Đáp lại, Visual C ++ sẽ thêm hàm OpCreate () vào lớp CMyClockCtrl. Nhấp vào nút Chỉnh sửa mã trong ClassWizard. Đáp lại, Visual C ++ sẽ mở tệp MyClockCtrl.cpp với chức năng OnCreate () trong chế độ chỉnh sửa. Viết mã sau trong hàm OnCreate ():

INT CMYCLOCKCTRL :: ONCREATE (LPCREATESTRUCT LPCREATESTRUCT) { NẾU (COLECONTROL :: ONCREATE (LPCREATESTRUCT) == -1) RETURN -1; // TODO: THÊM MÃ TẠO ĐẶC BIỆT CỦA BẠN Ở ĐÂY // ĐẶT HẸN GIỜ. SETTIMER (1, 1000, NULL); TRỞ LẠI 0; }
 

bạn nhập mã bao gồm một nhà điều hành duy nhất, mà làm cho SetTimer () để thiết lập bộ đếm thời gian đến 1000 thời gian ms:

SetTiltier (1, 1000, NULL);

Từ bây giờ, mỗi 1000 mili giây Windows sẽ gửi một thông báo WM_TIMER tới bộ điều khiển. Bây giờ bạn cần liên kết mã với sự kiện WM_TIMER: Chọn ClassWizard từ trình đơn View. Trên trang Bản đồ Thư, hãy chọn sự kiện sau:

Tên Lớp: CMyClockCtrl ID đối tượng: CMyClockCtrl Message: WM_TIMER

Nhấp vào nút Thêm chức năng. Đáp lại, Visual C ++ sẽ thêm chức năng OnTimer () vào lớp CMyClockCtrl. Nhấp vào nút Chỉnh sửa mã trong ClassWizard. Đáp lại, Visual C ++ sẽ mở tệp MyClockCtrl.cpp với chức năng OnTimer () trong chế độ chỉnh sửa. Viết mã sau trong hàm OnTimerO:

VOID CMYCLOCKCTRL :: ONTIMER (UINT NIDEVENT) { // TODO: THÊM MÃ TRÌNH XỬ LÝ THƯ CỦA BẠN Ở ĐÂY VÀ / HOẶC GỌI / / MẶC ĐỊNH // CHUYỂN CUỘC GỌI ĐẾN CHỨC NĂNG ONDRAW (). INVALIDATECONTROL (); COLECONTROL :: ONTIMER (NIDEVENT); }
 

 

 

6. Cho phép các thuộc tính cơ bản trong ActiveX MyClock

Các thuộc tính cơ bản (Thuộc tính cổ phiếu) được xác định trước. Dưới đây là danh sách các thuộc tính cơ bản:

Dáng vẻ bên ngoài – Xuất hiện (3 chiều hoặc bằng phẳng) BackColor – Màu nền BorderStyle – Khung Kiểu Chú thích – Tiêu đề Enabled – Tình trạng có sẵn / không có sẵn Font – Font ForeColor – màu Foreground hWnd – Marker cửa sổ readyState – Ready Status chữ – Text

Để thực hành, chúng tôi bao gồm hai thuộc tính cơ bản trong ActiveX MyClock: BackColor và ForeColor. Làm như sau:

View -> ClassWizard -> Tự động hóa (proverte đến lớp CMyClockCtrl cài đặt trong tên lớp cửa sổ) Nhấn vào nút Thêm tài sản Chọn BackColor từ danh sách và nhấn OK Ngoài ra thêm và tài sản ForeColor.

Bộ điều khiển MyClock bây giờ có thuộc tính BackColor và ForeColor, nhưng chưa sử dụng các giá trị được lưu trữ trong các thuộc tính này. Bạn cần viết mã trong hàm OnDraw (), thực hiện công việc này:

VOID CMYCLOCKCTRL :: ONDRAW (CDC * PDC, CONST CRECT & RCBOUNDS, CONST CRECT & RCINVALID) { // TODO: THAY THẾ MÃ SAU BẰNG BẢN VẼ CỦA RIÊNG BẠN // CODE. / / ĐẶT MÀU NỀN TRƯỚC (MÀU CHỮ) PDC-> SETTEXTCOLOR (DỊCHCOLOR (GETFORECOLOR ())); // ĐẶT CHẾ ĐỘ NỀN TRONG SUỐT PDC-> SETBKMODE (TRANSPARENT); // TẠO MỘT BÀN CHẢI DỰA TRÊN GIÁ TRỊ BACKCOLOR CBRUSH BKBRUSH (DỊCHCOLOR (GETBACKCOLOR ())); // SƠN NỀN PDC-> FILLRECT (RCBOUNDS, & BKBRUSH); CHAR CURRENTTIME [30]; STRUCT TM * NEWTIME; DÀI LTIME; // LẤY THỜI GIAN HIỆN TẠI THỜI GIAN (& LTIME); NEWTIME = LOCALTIME (& LTIME); // CHUYỂN ĐỔI THỜI GIAN THÀNH MỘT CHUỖI. STRCPY (CURRENTTIME, ASCTIME (NEWTIME)); / / HOÀN THÀNH DÒNG VỚI MỘT KÝ TỰ KHÔNG GIAN. CURRENTTIME [24] = ”; // THÊM MỘT CHUỖI HẠN CHẾ KÝ TỰ. CURRENTTIME [25] = 0; // IN THỜI GIAN HIỆN TẠI PDC-> EXTTEXTOUT (RCBOUNDS.LEFT, RCBOUNDS.TOP, ETO_CLIPPED, RCBOUNDS, CURRENTTIME, STRLEN (CURRENTTIME), NULL); }
 

Vâng đó là tất cả, bây giờ kiểm soát MyClock có các thuộc tính của BackColor và ForeColor.

 

7. Cho phép một thuộc tính đặc biệt trong ActiveX MyClock

Trong nhiều trường hợp, bạn sẽ cần đưa vào thuộc tính kiểm soát của mình mà không có trong danh sách chuẩn. Những đặc tính này được gọi là đặc biệt. Ví dụ, hãy bao gồm thuộc tính UpdateInterval đặc biệt trong MyClock – thời gian cập nhật:

View -> ClassWizard -> Tự động hóa (proverte tên cửa sổ lớp học được đặt lớp CMyClockCtrl) Click vào nút tài sản Thêm trong cửa sổ bên ngoài tên loại UpdateInterval Trong các Loại hộp, chọn Dài Trong Tên biến phải m_updateinterval Cửa sổ chức năng thông báo đưa OnUpdateIntervalChanged Kiểm tra xem Đảm bảo rằng nút Thành viên được chọn trong quá trình triển khai thực hiện và nhấp vào OK

Do đó, chúng tôi đã xác định rằng với tài sản UpdateInterval được liên kết m_updateinterval biến và bất cứ khi nào giá trị tài sản UpdateInterval imenyatsya sẽ tự động thực hiện chức năng OnUpdateIntervalChanged. Bây giờ bạn cần phải khởi tạo thuộc tính UpdateInterval:

Mở tập tin MyClockCtl.cpp Tìm () chức năng và napishiet DoPropExchange trong nó như sau: // Khởi tạo thuộc tính UpdateInterval đến 1000 PX_Long (PPX, _T ( «UpdateInterval »), m_updateinterval, 1000);

Bây giờ chúng ta cần phải cập nhật các chức năng OnUpdateIntervalChanged:

// kiểm tra otrizatelnost if (m_updateinterval <0) { MessageBox ( «tài sản này có thể không phải là BE tiêu cực !!!»); m_updateinterval = 1000; } // Thiết lập bộ đếm thời gian SetTimer (1, (UINT) m_updateinterval, NULL) ;

và OnCreate:

/ / Thiết lập bộ đếm thời gian SetTimer (1, (UINT) m_updateinterval, NULL);

Leave a Reply

Your email address will not be published. Required fields are marked *