還沒有開始設計計算器的朋友可以檢視這裡:
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 ...