?? 我來(lái)了dlg.cpp
字號(hào):
// 我來(lái)了Dlg.cpp : implementation file
/*********************************
[學(xué)VC編游戲]
編著、程序設(shè)計(jì):唐明理 2004.7
E-mail: cqtml@163.com
**********************************/
#include "stdafx.h"
#include "我來(lái)了.h"
#include "我來(lái)了Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////
// 全程變量定義
/////////////////////////////////////////////
HBITMAP bit; //設(shè)備相關(guān)位圖 [2章]
HDC MemDC; //暫存設(shè)備場(chǎng)景 [2章]
int w,h; //圖形尺寸 [2章]
CString dir; //定義路徑變量 [2章]
CString cc; //公用變量 [2章]
int p; //當(dāng)前圖形序號(hào) [2章]
////////////////////////////////////////////
// 函數(shù)定義
////////////////////////////////////////////
BOOL loadbmp(CString cc);//調(diào)BMP圖片[2章]
/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog
CMyDlg::CMyDlg(CWnd* pParent /*=NULL*/)//[MFC自動(dòng)生成]
: CDialog(CMyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMyDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMyDlg::DoDataExchange(CDataExchange* pDX)//[MFC自動(dòng)生成]
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMyDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMyDlg, CDialog)//[MFC自動(dòng)生成]
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyDlg message handlers
BOOL CMyDlg::OnInitDialog()//對(duì)話框程序的初始入口,[MFC自動(dòng)產(chǎn)生]
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
//A、在編輯框顯示說(shuō)明文字
CString cc;
cc="\r\n 這是《學(xué)VC、編游戲》的第一個(gè)示例:\r\n\r\n";
cc+=" 在這一章我們使用了以下知識(shí)、技術(shù)\r\n\r\n";
cc+="1.在VC++中建立一個(gè)對(duì)話框程序,學(xué)習(xí)編譯運(yùn)行程序的方法。\r\n";
cc+="2.引入了有關(guān)圖形處理的數(shù)據(jù)結(jié)構(gòu):HBITMAP (設(shè)備相關(guān)位圖)、HDC(設(shè)備場(chǎng)景).介紹了位圖拷貝命令BitBlt()。\r\n";
cc+="3.學(xué)習(xí)C++的功能函數(shù)的定義和使用方法。\r\n";
cc+="4.學(xué)習(xí)調(diào)用圖形的MFC方法LoadImage()和顯示圖形的方法\r\n";
cc+="5.學(xué)習(xí)在編輯框上顯示文字和在設(shè)備場(chǎng)景中顯示文字的方法。\r\n\r\n";
cc+="重點(diǎn):在VC中創(chuàng)建程序、并顯示圖形。";
SetDlgItemText(IDC_EDIT1,cc); //在編輯框中顯字
//B、建立圖形環(huán)境
MemDC =CreateCompatibleDC(0); //創(chuàng)建設(shè)備場(chǎng)景
//C、設(shè)角色數(shù)據(jù)
dir="圖片/"; //設(shè)圖形路徑
p=0; //當(dāng)前圖形序號(hào)
//D.調(diào)入背景圖片
cc=dir+"地面.BMP"; //設(shè)地圖圖形文件名
if(loadbmp(cc)==FALSE) //調(diào)BMP圖片
{AfxMessageBox(cc+"沒(méi)找到!");return FALSE; }//顯示錯(cuò)誤提示,返回。
SelectObject(MemDC,bit); //設(shè)備相關(guān)位圖關(guān)聯(lián)到暫存設(shè)備場(chǎng)景
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMyDlg::OnPaint() //刷新[MFC自動(dòng)生成]
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CMyDlg::OnQueryDragIcon()//[MFC自動(dòng)生成]
{
return (HCURSOR) m_hIcon;
}
void CMyDlg::OnOK() //確定鍵,[類(lèi)向?qū)е卸x生成]
{ GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);//隱藏文本框
CClientDC dc(this); //
//A、顯示文字----------------------------------------------
SetTextColor(MemDC,RGB(255,255,255)); //設(shè)置地圖設(shè)備場(chǎng)景字色
SetBkMode(MemDC,TRANSPARENT); //字為透明方式
cc="哈哈,我來(lái)了!!!"; //設(shè)文字內(nèi)容
TextOut(MemDC,150,100,cc,lstrlen(cc)); //在MemDC顯示文字
BitBlt(dc.m_hDC,0,0,400,300,MemDC,0,0,SRCCOPY);//將MemDC的圖形在當(dāng)前屏幕上顯出
//B、顯示角色------------------------------------------------------
cc.Format("%s人/c%05d.bmp",dir,p); //設(shè)人物圖片名
if(loadbmp(cc)==FALSE) //調(diào)BMP圖片
{AfxMessageBox(cc+"沒(méi)找到!");return;}
SelectObject(MemDC,bit); //設(shè)備相關(guān)位圖關(guān)聯(lián)到暫存設(shè)備場(chǎng)景
BitBlt(dc.m_hDC,200,160,w,h,MemDC,0,0,SRCCOPY);//將MemDC的圖形在當(dāng)前屏幕上顯出
// CDialog::OnOK();
}
void CMyDlg::OnCancel() //退出,[類(lèi)向?qū)е卸x生成]
{//////////////////////////////////
DeleteDC(MemDC); //刪除暫存設(shè)備場(chǎng)景
DeleteObject(bit); //刪除暫存設(shè)備相關(guān)位圖
//////////////////////////////////
CDialog::OnCancel();
}
//**************************************************
// loadbmp(CString cc)//調(diào)BMP圖片
// 調(diào)cc指定的圖形;取得的圖形在設(shè)備相關(guān)位圖bit中
// 圖形的寬、高存于全局變量w,h中
//**************************************************
BOOL loadbmp(CString cc)//調(diào)BMP圖片[2章]
{ DeleteObject(bit); //刪除上次的位圖內(nèi)存。
bit=(HBITMAP)LoadImage //調(diào)入cc指定的圖形
(AfxGetInstanceHandle(),//
cc, //文件名
IMAGE_BITMAP, //位圖方式
0, //圖形寬
0, //圖形高
LR_LOADFROMFILE|LR_CREATEDIBSECTION//方式
);
if(bit==NULL) return FALSE; //調(diào)圖失敗
DIBSECTION ds; //
BITMAPINFOHEADER &bm = ds.dsBmih; //
GetObject(bit,sizeof(ds),&ds); //取位圖的信息->bminfo
w = bm.biWidth; //得到位圖寬度值
h = bm.biHeight; //得到位圖高度值
return TRUE;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -