MFC計算器製作 按鍵響應

2021-09-25 20:39:47 字數 3306 閱讀 2929

還沒有開始設計計算器的朋友可以檢視這裡:

mfc計算器製作----介面設計

mfc計算器製作----**實現

用過windows自帶的計算器的都指導,計算器裡面的按鍵都是可以通過鍵盤來進行操作的。但是我們自己設計的計算器是沒有這個功能的,只能通過滑鼠進行按鈕的按下(電腦可觸屏的除外)。所以我們需要通過**來實現軟體對按鍵的響應。

首先我們需要知道虛擬鍵碼:虛擬鍵碼儲存在wm_keydown、wm_keyup、wm_syskeydown和wm_syskeyup訊息的wparam引數中。此**標識按下或釋放的鍵,也就是說,我們每按下乙個按鍵,都會將按鍵相應的資訊傳輸給wparam引數中,從而做出對應的操作。我們將應用這個來實現按鍵的響應。以下是各個按鍵對應的鍵碼:

從**中我們可以看到數字鍵以及字母都是沒有相對應的鍵碼(小鍵盤的數字鍵是有鍵碼的),所以需要我們自行在原始檔中定義(在計算器中就是在實現計算器功能的原始檔(dlg.cpp))。

#define vk_0 0x30  //用每乙個字元的十六進製制來定義各個vk

#define vk_1 0x31

#define vk_2 0x32

#define vk_3 0x33

#define vk_4 0x34

#define vk_5 0x35

#define vk_6 0x36

#define vk_7 0x37

#define vk_8 0x38

#define vk_9 0x39

#define vk_o 79 //似乎字母的可以省略0x,但數字不行

#define vk_l 76

#define vk_s 83

#define vk_c 67

#define vk_t 84

#define vk_b 66

#define vk_h 72

在定義完之後我們需要通過類嚮導(在應用介面,即dialog中右鍵)插入乙個pretranslatemessage函式。

else if (pmsg->wparam == vk_oem_minus)

else if (pmsg->wparam == vk_multiply)

else if (pmsg->wparam == vk_oem_2)

else if (pmsg->wparam == vk_return)

else if (pmsg->wparam == vk_oem_period)

else if (pmsg->wparam == vk_2)

else if (pmsg->wparam == vk_3)

else if (pmsg->wparam == vk_4)

else if (pmsg->wparam == vk_7)

else if (pmsg->wparam == vk_escape)

else if (pmsg->wparam == vk_delete)

else if (pmsg->wparam == vk_oem_4)

else if (pmsg->wparam == vk_oem_6)

if (pmsg->wparam == vk_o)

else if (pmsg->wparam == vk_l)

else if (pmsg->wparam == vk_s)

else if (pmsg->wparam == vk_t)

else if (pmsg->wparam == vk_c)

else if (pmsg->wparam == vk_oem_5)

else if (pmsg->wparam == vk_b)

else if (pmsg->wparam == vk_h)

}(這是我的計算器上的按鍵響應,每個人可以根據習慣等進行不同的設計)

多按鍵響應

當然,在鍵盤中可能會存在乙個按鍵有兩重用途(例如8鍵還是乘號),這時就需要通過多重按鍵響應來實現。

以乘法為例,按照正常人的操作,我們會用shift+8來打出乘號,所以我們需要在原始檔(檔案dlg.cpp)中定義

#define keydown(vk_code)((getasynckeystate(vk_code)&0x8000)?1:0)

#define keyup(vk_code)((getasynckeystate(vk_code)&0x8000)?0:1)

然後在pretranslatemessage函式裡面進行如下操作

else if (pmsg->wparam == vk_8 && !(getkeystate(vk_shift) & 0x8000)) //如果沒有按下shift鍵時按下了8鍵則執行按下鍵為8時的操作

else if (pmsg->wparam == vk_8 && getkeystate(vk_shift) & 0x8000) //如果按下shift鍵時執行乘號鍵的操作

以上就是計算器按鍵響應的操作,再次安利一波我的計算器製作教程:

mfc計算器製作----介面設計

mfc計算器製作----**實現

簡易計算器製作

簡易的製作了一下計算器,基本功能都實現了,待後續完善 數字鍵按鈕 private void button8 click object sender,eventargs e 追加 如果下面文字框內容不為0並且上次沒有點選運算子 else 點選了數字按鈕 prev 1 運算子按鈕 private voi...

練習 製作計算器

自製乙個計算器,實現計算器的基本功能,按順序依次計算,可進行拓展練習新增其他內容,盡可能完善 思路 1 介面布局 2 數字鍵功能 3 運算子功能 4 清屏鍵 退格鍵 小數點等功能 5 查缺補漏 檔案 using system using system.collections.generic usin...

模擬計算器(MFC)實現

忙了一天終於搞定了。以下為演算法類封裝 caldlg.cpp implementation file author baker email baker1203 sina.com course designing for data structures and program design in c ...