03手寫乙個簡單的應用程式,訊息對映巨集的使用

2021-09-21 01:42:22 字數 2193 閱讀 9719

mfc.h

#pragma once

#include //寫mfc程式需要包含這個檔案

;//2)框架類 cframewnd的派生類

class myframe:public cframewnd;/*

(1).定義兩個類來繼承自兩個基類,在應用程式類定義乙個物件,

然後在物件的建構函式裡面建立框架類物件,進行建立視窗,更新視窗等操作,最後儲存這個框架類

物件指標

mfc流程

(1)有且只有乙個全域性的應用程式類物件

(2)在程式入口函式實現功能initinstance()

1.給框架類myframe物件動態分配空間(自動呼叫它的建構函式)

框架類myframe物件建構函式裡建立視窗cwnd::create

2.框架類物件顯示視窗showwindow( int ncmdshow );

3.框架類物件更新視窗cwnd::updatewindow

4.儲存框架類物件指標cwinthread::m_pmainwnd

(3)注意:cwnd是所有視窗的基類,所有的函式都是繼承自這個基類

查詢的時候要加上基類,如cwnd::showwindow

(4)訊息對映巨集的實現原理(通過巨集將指定的訊息對映到派生類的成員函式)

1、mfc中用declare_message_map巨集宣告訊息對映函式;

2、mfc中用begin_message_map和end_message_map巨集實現訊息對映;

3、每個mfc應用程式中都存在乙個訊息響應鍊錶,這個表由declare_message_map定義,並

由begin_message_map和end_message_map巨集之間的**填充內容。這樣,取得訊息後,mfc

會查詢這個表,對於感興趣的訊息會呼叫其響應函式,對於沒有處理的訊息,會繼續查詢其父類的對映表。

afx_msg是限定符,表明是訊息響應函式。

在類檢視雙擊類名就可以跳轉到類的宣告處

對映機制的原理

windows 下的程式包括 windows 系統都是基於訊息機制的。

mfc訊息對映機制的具體實現方法是:在每個能接收和處理訊息的類中,定義乙個訊息和訊息響應函式的靜態對照表,即訊息對映表;

在訊息對映表中,訊息與對應的訊息處理函式指標是成對出現的。某個類能處理的所有訊息及其對應的訊息處理函式的位址都列在這個類所對應的靜態表中;

當有訊息需要處理時,程式只要搜尋該訊息靜態表,檢視表中是否含有該訊息,就可以知道該類能否處理此訊息;

如果能處理該訊息,則同樣依照靜態錶能很容易找到並呼叫對應的訊息處理函式!

*/

mfc.cpp

//純手寫乙個mfc程式,選擇win32專案,屬性裡面要不要使用「window」標準庫,選擇「在共享dll中使用mfc」

#include "mfc.h"

//有且只有乙個全域性的應用程式類物件

//這是程式的入口位址,裡面封裝了winmain函式

//定義訊息巨集--通過巨集將指定的訊息對映到派生類的成員函式,(指定了哪乙個類接受訊息)

begin_message_map(myframe, cframewnd)

on_wm_lbuttondown()

on_wm_paint()

end_message_map()

//這裡的目的主要是為了生成類的訊息對映表中項--處理的訊息型別,類裡面有訊息的處理函式

myframe::myframe()

void myframe::onlbuttondown(uint, cpoint)

void myframe::onpaint()

/* *

事件處理

訊息對映:

1:所操作框架類中,宣告訊息對映巨集 declare_message_map();

2.在對應的cpp裡面定義巨集

begin_message_map(myframe, cframewnd)//派生類名,基類名

on_wm_lbuttondown()//訊息對映入口

end_message_map()//

3.對應類中訊息處理函式的宣告

afx_msg void onlbuttondown(uint, cpoint);

4.對應.cpp訊息處理函式的定義

messagebox(text("滑鼠左鍵"));

*/

乙個應用程式產生乙個訊息佇列嗎

一般來講,乙個應用程式對應唯一的乙個程序號,該程序號對應的資源 建立的時間 記憶體等,都是一一對應的,該程序產生的訊息也是唯一的,不會跟其他應用程式衝突。應用程式需要跟核心 或稱系統 進行互動,那麼就要傳遞訊息,就有訊息管理機制。應用程式產生的訊息,會加入系統的訊息佇列當中,根據優先順序管理 排程等...

乙個簡單的Wince手機應用程式

wm 6.1並沒有自帶重啟或休眠 掛機 的功能,沒有這兩個功能,確實有點不方便。於是自寫了乙個程式實現重啟和休眠,模擬器截圖如下 wince程式並沒有什麼難的地方,只是呼叫支援wince的api函式,倒是基於kol程式設計有些想法。1 kol ce的ini不支援中文。網上雖然有人是或小改kol ce...

從乙個應用程式挑到另乙個應用程式

背景 假如有a,b兩個程式 當然都得是你自己寫的 想在a程式中判斷b程式是否存在本機上,存在就啟動他,啟動的時候彈出乙個對話方塊,對話方塊的內容是a程式帶過去的。背景到此結束,下面是實現流程。實現 plain view plain copy 這個方法明白人一看就懂,你要是不懂還是先去看基礎教程吧!這...