標籤:
//////////////2015/07/21////////////////
/////////////by xbw///////////////////////
/////////////環境 VS 2013////////////
飛機大戰做的差不多了,閑來無事加點高大上的東西,關於單文檔的登陸介面;;;
介面有點醜,但是足夠帳號登陸了,,先試一把;
還不錯吧,該有的都有了;;
下面說一下過程 、、、、、、
首先,我們要在資源檢視中建立一個Dialog對話方塊;;;
先大體畫一下這個對話方塊,自己設計就好了,然後在空白處右鍵添加類,給這個對話方塊添加類;
這裡呢,我添加了一個loading類,英語不是太好,胡亂寫點高大上的英文;;;
在哪用對話方塊我們就需要吧#include "loading.h"加為他的標頭檔,,,
這樣呢,我在view類中建了一個函數
BOOL CPlaneGameView::Indlg(){ loading dlg; //opening = TRUE; if (dlg.DoModal() == IDOK) { Invalidate(); opening = dlg.open1; } return TRUE;}
調用在
void CPlaneGameView::OnInitialUpdate(){CView::OnInitialUpdate();// TODO: 在此添加專用代碼和/或調用基類//登陸介面Indlg();//初始化遊戲if (!opening)InitGame();else exit(0);}
這個函數中會依次運行;
這樣的話登陸介面就會先於單文件視窗顯示,
至於opening是我設定的開關,就是點登陸介面的退出按鈕時就會執行exit(0),整個程式就結束了,之前遇到的問題是,點了退出按鈕後,程式反而運行了飛機大戰主程式,哭笑不得,索性把這個按鈕刪掉了,玩家只能進入遊戲才能退出,後來一想這不扯呢嗎,哈哈,於是弄了起來;;
先來段loading.cpp的代碼;
完整的******
// loading.cpp : 實現檔案//#include "stdafx.h"#include "PlaneGame.h"#include "loading.h"#include "afxdialogex.h"// loading 對話方塊IMPLEMENT_DYNAMIC(loading, CDialogEx)loading::loading(CWnd* pParent /*=NULL*/): CDialogEx(loading::IDD, pParent), open(false), open1(false){}loading::~loading(){}void loading::DoDataExchange(CDataExchange* pDX){}BEGIN_MESSAGE_MAP(loading, CDialogEx)ON_WM_NCHITTEST()ON_WM_CTLCOLOR()ON_BN_CLICKED(IDCANCEL, &loading::OnBnClickedCancel)ON_BN_CLICKED(IDOK, &loading::OnBnClickedOk)ON_BN_CLICKED(IDOK2, &loading::OnBnClickedOk2)END_MESSAGE_MAP()// loading 訊息處理常式//滑鼠拖動視窗移動LRESULT loading::OnNcHitTest(CPoint point){// TODO: 在此添加訊息處理常式代碼和/或調用預設值ScreenToClient(&point);CRect rc;GetClientRect(&rc);if (rc.PtInRect(point)){return HTCAPTION;}else{return CDialogEx::OnNcHitTest(point);}}HBRUSH loading::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor){//HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);//CFont font;//font.CreatePointFont(200, _T("宋體"), NULL);//GetDlgItem(IDC_STATIC)->SetFont(&font);// TODO: 在此更改 DC 的任何特性//在OnInitDialog()函數中添加:// TODO: 在此添加額外的初始化代if (nCtlColor == CTLCOLOR_STATIC){pDC->SetTextColor(RGB(200, 100, 50));pDC->SetBkMode(RGB(200, 100, 50)); //設定背景透明 return HBRUSH(GetStockObject(HOLLOW_BRUSH));}// TODO: 如果預設的不是所需畫筆,則返回另一個畫筆//return hbr;return 0;}void loading::OnBnClickedCancel(){// TODO: 在此添加控制項通知處理常式代碼open = FALSE;CDialogEx::OnCancel();}void loading::OnBnClickedOk(){// TODO: 在此添加控制項通知處理常式代碼CString name;CString pwd;int flog = 1;GetDlgItem(IDC_EDIT3)->GetWindowTextW(name);GetDlgItem(IDC_EDIT4)->GetWindowTextW(pwd);if (name.Compare(_T("xbw12138")) || pwd.Compare(_T("201401061130"))){if (name.Compare(_T("xbw12138"))){flog = 0;MessageBox(_T("使用者名稱不正確"), _T("提示"));}if (pwd.Compare(_T("201401061130"))&&flog==1)MessageBox(_T("密碼不正確"), _T("提示"));}else{OnOK();}}void loading::OnBnClickedOk2(){open1 = FALSE;// TODO: 在此添加控制項通知處理常式代碼}
LRESULT loading::OnNcHitTest(CPoint point)這個是添加的訊息,具體什麼訊息不再這說明了,請看我的其他文章,滑鼠拖動對話方塊移動的那篇,對,就是這個功能;
HBRUSH loading::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)也是添加的訊息,為了使static text等一些空間透明,在有背景圖的時候效果很明顯,不過這裡裝逼失敗了,一會文章補上;;;;;
void loading::OnBnClickedCancel()
{
// TODO: 在此添加控制項通知處理常式代碼
open = FALSE;
CDialogEx::OnCancel();
}
這段已經沒用了,取消的空間已經被我刪除了;;;
void loading::OnBnClickedOk()
{
// TODO: 在此添加控制項通知處理常式代碼
CString name;
CString pwd;
int flog = 1;
GetDlgItem(IDC_EDIT3)->GetWindowTextW(name);
GetDlgItem(IDC_EDIT4)->GetWindowTextW(pwd);
if (name.Compare(_T("xbw12138")) || pwd.Compare(_T("201401061130")))
{
if (name.Compare(_T("xbw12138")))
{
flog = 0;
MessageBox(_T("使用者名稱不正確"), _T("提示"));
}
if (pwd.Compare(_T("201401061130"))&&flog==1)
MessageBox(_T("密碼不正確"), _T("提示"));
}
else
{
OnOK();
}
}
這段是重點了吧算是,檢查登陸是否正確,,,雖然是個單機,不過這樣也很高大上,後續呢,我將要用xml記錄一些資料,試試能不能實現一個帳號記錄一個分數,弄個熱門排行榜什麼的,等我昂;
void loading::OnBnClickedOk2()
{
open1 = FALSE;
// TODO: 在此添加控制項通知處理常式代碼
}
這就是退出按鈕的開關,,,,至於一些變數,都添加在相應的標頭檔裡吧,一定要記得初始化,要不會亂套的,,,
這樣就基本差不多了,不正確的地方互相交流學習,有問題在下邊留言,我會回複跟您一同解決問題的,
這樣就車不多了
,不多說了
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
windows程式設計——飛機大戰筆記(單文檔檔案登陸介面)