【mfc】基本對話框程序——加法器標(biāo)簽:
mfcc++win32對話框callback2015-01-03 19:30 1750人閱讀
評論(0)
舉報 分類:
win32&mfc(19)
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許歡迎亂轉(zhuǎn)載,標(biāo)好作者+原文地址就可以了!感謝欣賞!覺得好請回個貼!
都說好了是vc6的mfc,這個加法器當(dāng)然不同于數(shù)電與單片機(jī)的加法器,^_^開個玩笑,
正式轉(zhuǎn)入正題,
前兩篇mfc,甚至連mfc都不是,僅僅是win32程序,都只不過是一個普通的彈窗程序而已,
這次繼續(xù)為大家?guī)淼暮唵蔚膚in32程序,
不過已經(jīng)有基本功能了,能夠?qū)崿F(xiàn)兩個編輯框里面的數(shù)據(jù)相加。
一、基本目標(biāo)
創(chuàng)建如下程序:
有兩個系統(tǒng)自帶的按鈕,原為“確定”與“取消”,現(xiàn)在改為“計算”與“關(guān)閉”
“計算”按鈕能夠把兩個可編輯的對話框里面的數(shù)字相加并輸出到第三個對話框,
“關(guān)閉”按鈕自然能夠關(guān)閉對話框了
二、制作過程
1、首先創(chuàng)建一個簡單的win32程序,并在里面創(chuàng)建資源腳本,這個怎么創(chuàng)建請查閱我之前的《【mfc】對于對話框程序的優(yōu)化與為程序創(chuàng)建圖標(biāo)》(
點(diǎn)擊打開鏈接)一文,唯一的不同,是這次在資源腳本中插入的是對話框,而不是圖標(biāo),當(dāng)然,為了程序更加美觀,你可以參考上文,為其添加圖標(biāo)。
Dialog資源里面還有子選項,這里不需要選擇,如圖所示選擇父資源Dialog即可,選擇“新建”完成創(chuàng)建
2、選擇“新建”完成創(chuàng)建之后則彈出如下的界面:
首先把系統(tǒng)附送的“確定”與“取消”按鈕拖到最下方,單擊這些按鈕,并把其的Caption項改為“確定”與“取消”
在這個界面,通過右側(cè)的控件工具箱,你可以拖出自己需要的控件,配合下方的控件工具欄能夠把控件的位置安排好,點(diǎn)擊任何一個控件設(shè)置好相應(yīng)的屬性,
比如點(diǎn)擊一個靜態(tài)文本,通過編輯其Caption項,可以把"Static"改成"+"
同時請記錄一下每個控件的ID,一會兒寫代碼的時候,有可能用到,需要通過ID來控制
拖錯控件之后,選中,按Delete鍵刪除
弄好之后,點(diǎn)擊左下方的ClassView標(biāo)簽頁,回到WinMain函數(shù)中,如同《【mfc】Helloworld》(
點(diǎn)擊打開鏈接)一文中寫代碼。
3、最終把這個對話框里面的控件安排如下圖所示:
切記:
(1)把系統(tǒng)自帶的兩個按鈕的Caption從“確定”改到“計算”,從"取消"改到"關(guān)閉",
(2)對于三個EditField編輯框,請把最右方的那個編輯框的樣式改成“只讀”
具體是點(diǎn)擊這個編輯框,在樣式標(biāo)簽頁,把“只讀”勾上
(3)對于整個大的對話框,請在常規(guī)中修改Caption,使其標(biāo)題為“加法計算器”或者你喜歡的其他,并且在“更多樣式”中把“居中”屬性勾上,這樣,你打開這個程序,這個對話框就會出現(xiàn)在屏幕的中央,而不是左上角。
4、通過ClassView標(biāo)簽頁,回到WinMain函數(shù)中寫下如下的代碼:
[cpp]
view plain copyprint?// dialogbox.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
//一開始記得要引入resource.h,因為我們的對話框就創(chuàng)建在資源腳本中
#include "resource.h"
//這個回調(diào)函數(shù)MainProc是對話框的操作函數(shù),不是真正的入口,是被WinMain中的DialogBox語句所調(diào)用的,
//4個形式參數(shù),返回值BOOL CALLBACK皆是系統(tǒng)要求的,無法改變
BOOL CALLBACK MainProc(
HWND hwndDlg, // handle of dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
//如果有按鈕被單擊
if(uMsg==WM_COMMAND){
//如果點(diǎn)擊的是IDCANCEL按鈕,ID為“IDCANCEL”就是那個“關(guān)閉按鈕”
if(LOWORD(wParam)==IDCANCEL){
//那么我們就結(jié)束對話框。
EndDialog(hwndDlg,IDCANCEL);
//這個true與false沒有太大的區(qū)別,至少是對程序表現(xiàn)出來的東西沒有影響,true是我們寫代碼處理后續(xù)的事情,false是系統(tǒng)處理后續(xù)的系統(tǒng)。
return true;
}
//如果點(diǎn)擊的是IDOK按鈕,ID為“IDOK”就是那個“計算按鈕”
if(LOWORD(wParam)==IDOK){
//拿到IDC_EDIT1編輯框的值,傳到整形edit1,GetDlgItemInt其余參數(shù)為指定動作,據(jù)說hwndDlg是窗口句柄,true是取有符號數(shù),而不是無符號數(shù),但你知道這些又有什么意義呢?
int edit1 = GetDlgItemInt(hwndDlg,IDC_EDIT1,NULL,true);
//拿到IDC_EDIT2編輯框的值,傳到整形edit2,GetDlgItemInt其余參數(shù)為指定動作
int edit2 = GetDlgItemInt(hwndDlg,IDC_EDIT2,NULL,true);
//設(shè)置IDC_EDIT3那個只讀編輯框中的值為edit1+edit2的值
SetDlgItemInt(hwndDlg,IDC_EDIT3,edit1+edit2,true);
return true;
}
}
return 0;
};
//這是程序的主要入口
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
//上來就調(diào)用DialogBox參數(shù),第二個數(shù)值必須我們要彈出的對話框IDD_DIALOG1,也就是剛才在資源腳本中畫的對話框,強(qiáng)制轉(zhuǎn)化為(LPCSTR)才能正常編譯,
//第四個參數(shù)表示這個對話框被處理的函數(shù)為MainProc
DialogBox(hInstance,(LPCSTR)IDD_DIALOG1,NULL,MainProc);
return 0;
}
整個程序的邏輯就是一開始進(jìn)入WinMain函數(shù),然后返回值為BOOL CALLBACK類型的MainProc被調(diào)用,處理完一大堆邏輯之后,完成程序,就這么簡單。