Source
#include<afxwin.h>
#include "Header.h"
#include "resource.h"
#include "Dialog1.h"
#include "CObjTest.h"
CMyApp myApp;
float x = 800, y = 800;
int c_vuong = 0;
int m_vitrix = 0, m_vitriy = 100;
int _x = 0, _y = 0;
BOOL CMyApp::InitInstance()
{
m_pMainWnd =
new CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
return TRUE;
}
BEGIN_MESSAGE_MAP(CMainWindow, CFrameWnd)
ON_COMMAND(ID_CONFIG,
&CMainWindow::OnUpdateConfig)
ON_COMMAND(ID_LOAD,
&CMainWindow::OnUpdateLoad)
ON_COMMAND(ID_SAVE,
&CMainWindow::OnUpdateSave)
ON_WM_KEYDOWN()
ON_WM_PAINT()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
//Create(NULL,
_T("Chao NHD"));
LoadFrame(IDR_MENU1, WS_SYSMENU, NULL, NULL);
}
void CMainWindow::OnUpdateConfig()
{
Dialog1
myDlg;
myDlg.DoModal();
if (IDOK) {
c_vuong
= myDlg.d_canh;
m_vitrix
= myDlg.d_vitrix;
m_vitriy
= myDlg.d_vitriy;
Invalidate();
}
}
void CMainWindow::OnUpdateLoad()
{
CFile
file;
file.Open(L"infoStatus.txt", CFile::modeRead);
CArchive
ar(&file, CArchive::load);
CObjTest
info;
info.Serialize(ar);
ar.Close();
file.Close();
c_vuong =
info.c_canh;
m_vitrix =
info.c_vitrix;
m_vitriy =
info.c_vitriy;
_x =
info.c_x;
_y = info.c_y;
Invalidate();
MessageBox(CString(_T("Da
cap nhat trang thai!")), _T("Thong
bao"), MB_OK);
}
void CMainWindow::OnUpdateSave()
{
CObjTest
info;
CFile
file;
file.Open(L"infoStatus.txt", CFile::modeCreate | CFile::modeWrite);
CArchive
ar(&file, CArchive::store);
info.c_canh
= c_vuong;
info.c_vitrix
= m_vitrix;
info.c_vitriy
= m_vitriy;
info.c_x =
_x;
info.c_y =
_y;
info.Serialize(ar);
ar.Close();
MessageBox(CString(_T("Luu
trang thai thanh cong!")), _T("Thong
bao"), MB_OK);
}
void CMainWindow::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {
if (nChar == VK_F1) {
_x +=
30;
m_vitrix
+= 30;
}
if (nChar == VK_F2) {
_x -=
30;
m_vitrix
-= 30;
}
if (nChar == VK_F3) {
_y +=
30;
m_vitriy
+= 30;
}
if (nChar == VK_F4) {
_y -=
30;
m_vitriy
-= 30;
}
Invalidate();
}
void CMainWindow::OnPaint()
{
CPaintDC dc(this);
CRect
crect;
GetClientRect(&crect);
x =
crect.Width();
y =
crect.Height();
dc.Rectangle(x
- 200, 0, x, 100);//vung 2, kich thuoc 100x200
CString msg;
msg.Format(_T("kich
thuoc:%dx%d"), c_vuong, c_vuong);
dc.TextOut(x -
155, 45, msg);
dc.Rectangle(0,
0, x - 200, 100);//vung 3
dc.TextOut((x -
200) / 2 - 50, 45, CString(_T("NHD")));
dc.Rectangle(0
+ _x, 100 + _y, x + _x, y + _y);//vung 1
if
(m_vitrix >= (0 + _x) && m_vitrix <= (x + _x)
&&
m_vitriy >= (100 + _y) && m_vitriy <= (y + _y)) {
dc.Rectangle(m_vitrix,
m_vitriy, m_vitrix + c_vuong, m_vitriy + c_vuong);
}
else {
MessageBox(CString(_T("hinh
vuong khong duoc ve ben ngoai vung 1!")), _T("Thong
bao"), MB_OK);
}
}
-------------------------------------
Header.h
#pragma once
class CMainWindow : public CFrameWnd
{
public:
CMainWindow();
afx_msg void
OnPaint();
afx_msg void
OnUpdateConfig();
afx_msg void
OnUpdateLoad();
afx_msg void
OnUpdateSave();
afx_msg void
OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
DECLARE_MESSAGE_MAP()
};
class CMyApp : public CWinApp
{
public:
virtual BOOL
InitInstance();
};
----------------------------------------------------------------
Dialog1.h
#pragma once
#include "resource.h"
class Dialog1 : public CDialog
{
public:
Dialog1(CWnd* pParent = nullptr); // standard constructor
virtual
~Dialog1();
enum { IDD = IDD_DIALOG1 };
protected:
virtual void
DoDataExchange(CDataExchange* pDX); // DDX/DDV support
DECLARE_MESSAGE_MAP()
public:
int
d_canh = 100;
int
d_vitrix = 100;
int
d_vitriy = 100;
};
-------------------------------------------------
Dialog1.cpp
#include <afxwin.h>
#include "resource.h"
#include "Dialog1.h"
#include "afxdialogex.h"
Dialog1::Dialog1(CWnd* pParent /*=nullptr*/)
: CDialog(IDD_DIALOG1, pParent)
{
}
Dialog1::~Dialog1()
{
}
void Dialog1::DoDataExchange(CDataExchange* pDX)
{
DDX_Text(pDX, IDC_EDIT1,
d_canh);
DDX_Text(pDX, IDC_EDIT2,
d_vitrix);
DDX_Text(pDX, IDC_EDIT3,
d_vitriy);
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(Dialog1, CDialog)
END_MESSAGE_MAP()
---------------------------------------------------------
CObjTest.h
#pragma once
#include <afx.h>
class CObjTest :public CObject
{
public:
int
c_canh, c_vitrix, c_vitriy, c_x, c_y;
CObjTest(void);
void
Serialize(CArchive& ar);
DECLARE_SERIAL(CObjTest);
};
---------------------------------------------------------12
CObjTest.cpp
#include "CObjTest.h"
#include "afxwin.h"
CObjTest::CObjTest() {
}
IMPLEMENT_SERIAL(CObjTest, CObject, 0)
void CObjTest::Serialize(CArchive&
ar) {
CObject::Serialize(ar);
if (ar.IsStoring())
ar << c_canh << c_vitrix <<
c_vitriy << c_x << c_y;
else ar >>
c_canh >> c_vitrix >>
c_vitriy >> c_x >> c_y;
}