VS 2019 C++구현 첫 번 째 MFC 프로그램
그리고 다음 단 계 를 누 르 고 항목 을 설정 합 니 다.여기 서 제 이름 은 my firtmfc 입 니 다.
생 성 단 추 를 누 르 고 아래 대화 상 자 를 팝 업 합 니 다.
위의 MFC 응용 프로그램 을 설정 합 니 다.다음 과 같 습 니 다.
클릭 완성,아래 창 생 성.
첫 번 째 컴 파일 로 생 성 된 기본 항목 을 다음 인터페이스 로 가 져 옵 니 다.
VS 2019 인터페이스 를 클릭 하여"솔 루 션 자원 관리자"
여기까지 프로젝트 가 완공 되 고 컴 파일 이 통과 되 었 습 니 다.
2.사용자 정의 기능 추가(일반적인 그림 을 예 로 들 면)
자원 보 기 를 누 르 면 이 컨트롤 은 뒤에서 조작 해 야 합 니 다.
IDR 더 블 클릭MAINFRAME,여기에 그림 그리 기 기능 을 추가 할 수 있 습 니 다.
Ribbon 에 그림 그리 기 기능 을 추가 할 수도 있어 요.
그리고 도구 상자->RIbbon 편집기 클릭:
Ribbon 의 패 널 컨트롤 을 더 블 클릭 합 니 다.
이름 을 모양 으로 바 꾸 고 단추 컨트롤 을 추가 합 니 다.이름 을 사각형 으로 바 꿉 니 다.
사각형 의 잡다 한 항목 을 수정 하고 ID 는 ID 로 변경 합 니 다.RECTANGLE
오른쪽 단추 사각형 버튼,이벤트 처리 프로그램 추가 선택
다음 창 가 져 오기
이 팝 업 창 설정:
확인 을 클릭 한 후,우 리 는 아래 의 코드 를 얻 었 다.
아래 내용 참조https://www.jb51.net/article/214347.htm
처음으로 c++를 사 용 했 는데 mfc 의 많은 함수 가 익숙 하지 않 아서 바로 사용 했다.
graph.cpp 원본 파일 을 새로 만 듭 니 다.
#include "framework.h"
#include "pch.h"
IMPLEMENT_SERIAL(graph, CObject, 1)
graph::graph(int l, int u, int r, int d)
{
left = l;
up = u;
right = r;
down = d;
state = 0;
fcolor = 0xffffff;
}
void graph::Offset(int cx, int cy)
{
left += cx;
right += cx;
up += cy;
down += cy;
}
void graph::onPress(int x, int y)
{
sx = x; sy = y;
state = 0;
//
if (left < x && x < right &&
up < y && y < down) {
state = 1;
return;
}
if (left - f_width / 2 < x && x < left + f_width / 2) state |= 2; //
if (up - f_width / 2 < y && y < up + f_width / 2) state |= 4;//
if (right - f_width / 2 < x && x < right + f_width / 2) state |= 8;//
if (down - f_width / 2 < y && y < down + f_width / 2) state |= 16; //
}
void graph::onRelease(int x, int y)
{
state = 0;
}
void graph::SetBorderColor(int color)
{
fcolor = color;
}
void graph::SetFillColor(int color)
{
bcolor = color;
}
int graph::onMove(int x, int y)
{
int cx, cy;
cx = x - sx; cy = y - sy;
sx = x; sy = y;
if (state == 1) {
Offset(cx, cy); // cx,cy
}
if (2 == (state & 2)) {
left = x;
}
if (4 == (state & 4)) {
up = y;
}
if (8 == (state & 8)) {
right = x;
}
if (16 == (state & 16)) {
down = y;
}
return state == 0 ? 0 : 1;
}
void graph::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if (ar.IsLoading()) {
ar >> left >> right >> up >> down >> f_width >> fcolor >> bcolor;
}
else
{
ar << left << right << up << down << f_width << fcolor << bcolor;
}
}
graph::~graph()
{
}
void graph::onDraw(CDC* pDC) {
CBrush b(fcolor);
pDC->SelectObject(&b);
CRect r(left, up, right, down);
pDC->FillRect(&r, &b);
CPen p(PS_SOLID, 1, bcolor);
pDC->SelectObject(&p);
pDC->Rectangle(left, up, right, down);
pDC->MoveTo(left, up);
pDC->DrawText(_T(" "), -1, new CRect(left, up, right, down), DT_CENTER | DT_VCENTER | DT_SINGLELINE);
}
항목 에 헤더 파일 graphz.h 추가graph.h 에 다음 코드 를 추가 합 니 다:
#pragma once
class graph :
public CObject
{
protected:
//
DECLARE_SERIAL(graph)
int left, up, right, down;
//
unsigned int state;
int sx, sy;
int f_width = 5;
int fcolor = 0xffffff, bcolor = 0;
public:
graph() :graph(50, 50, 100, 100) {
}
graph(int l, int u, int r, int d);
void Offset(int cx, int cy);
void onPress(int x, int y); //
int onMove(int cx, int cy); //
void onRelease(int x, int y); //
virtual void onDraw(CDC* pDC);
virtual int getGraphID() { return 0; }
virtual void Serialize(CArchive& ar);
void SetFillColor(int color);
void SetBorderColor(int color);
~graph();
};
framework.h 에 graph.h 추가
#include "graph.h"
우 리 는 직사각형 을 그 려 야 한다.여기에 사각형 의 관련 코드 를 추가 하고,위의 절차 와 마찬가지 로 rectangle.h 와 rectangle.cpp 를 볼 수 있 습 니 다.
rectangle.cpp
#include "framework.h"
#include "pch.h"
rectangle::rectangle(int l, int u, int r, int d) :graph(l, u, r, d)
{
state = 0;
fcolor = 0xffffff;
}
void rectangle::onDraw(CDC* pDC)
{
CBrush b(fcolor);
pDC->SelectObject(&b);
CRect r(left, up, right, down);
pDC->FillRect(&r, &b);
CPen p(PS_SOLID, 1, bcolor);
pDC->SelectObject(&p);
pDC->Rectangle(left, up, right, down);
pDC->MoveTo(left, up);
}
rectangle::~rectangle()
{
}
rectangle.h
#include "graph.h"
class rectangle :
public graph
{
public:
//DECLARE_SERIAL(graph)
//void Serialize(CArchive& ar);
rectangle() :graph(50, 50, 100, 100) {}
rectangle(int l, int u, int r, int d);
void onDraw(CDC* pDC);
int getGraphID() { return 2; }
~rectangle();
};
그리고 my firstmfcDoc.h 에 list 를 추가 합 니 다.
std::list<graph*> graphList;
list 를 호출 했 기 때문에 framework.h 에 추가 합 니 다.
#include <list>
OnRectangle()함수 로 이전에 생 성 된 함 수 를 호출 하려 면 다음 코드 를 추가 합 니 다.
CmyfisrtmfcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
pDoc->graphList.push_front(new rectangle(50, 50, 100, 100));
Invalidate();
myfirstmfcview.cpp 의 OnDraw 함 수 를 다음 과 같이 수정 합 니 다.
void CmyfisrtmfcView::OnDraw(CDC* pDC)
{
CmyfisrtmfcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO:
std::list<graph*>::iterator v;
for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
(*v)->onDraw(pDC);
}
}
다음은 클래스 마법사 로 메 시 지 를 추가 합 니 다.마우스 왼쪽 단 추 를 누 르 고 메 시 지 를 누 르 고 왼쪽 단 추 를 누 르 면 메 시 지 를 풀 고 마우스 로 메 시 지 를 이동 합 니 다.
생 성 된 버튼 누 르 기 함수 에서
void CmyfisrtmfcView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: /
CmyfisrtmfcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO:
std::list<graph*>::iterator v;
for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
(*v)->onPress(point.x, point.y);
}
Invalidate();
//CView::OnLButtonDown(nFlags, point);
}
위 와 같은 방식.생 성 된 코드 는 my firstmfcview 에서 다음 과 같 습 니 다.
void CmyfisrtmfcView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: /
CmyfisrtmfcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO:
std::list<graph*>::iterator v;
for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
(*v)->onRelease(point.x, point.y);
}
//CView::OnLButtonUp(nFlags, point);
}
void CmyfisrtmfcView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: /
CmyfisrtmfcDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO:
std::list<graph*>::iterator v;
for (v = pDoc->graphList.begin(); v != pDoc->graphList.end(); ++v) {
(*v)->onMove(point.x, point.y);
}
Invalidate();
// CView::OnMouseMove(nFlags, point);
}
여기까지 모든 일 을 완 성 했 으 니 번역 을 진행 할 수 있다.아래 도형 을 생 성 합 니 다.사각형 은 이동 할 수 있 고 스 트 레 칭 이 가능 합 니 다.
항목 의 속성 을 클릭 하고 설정 속성 에서 고급 을 선택 하 십시오.MFC 는 정적 라 이브 러 리 를 사용 합 니 다.한 번 컴 파일 하면.exe 를 생 성 할 수 있 습 니 다.다른 컴퓨터 에서 동적 라 이브 러 리 에 의존 하지 않 아 도 열 수 있 습 니 다.
요약:
1.프로젝트 프로젝트 를 추가 하 는 법 을 배 웠 습 니 다.
2.사용자 의 원본 파일 과 헤더 파일 을 추가 하고 프로젝트 와 연결 하 는 것 을 배 웠 습 니 다.
3.클래스 가 이 드 를 배 웠 다
4.버튼 컨트롤 생 성 을 배 웠 습 니 다.메시지 ID 를 통 해 함수 와 연 결 됩 니 다.
참고 문헌:
(1) vs 2019 MFC 오 피 스 인터페이스 구현 그래 픽 프로젝트(초 특급 상세)
(2) vs 2019 에서 MFC 를 사용 하여 간단 한 windows 창 프로그램 을 빠르게 구축 합 니 다.
VS 2019 C++구현 에 관 한 첫 번 째 MFC 프로그램 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 C++첫 번 째 MFC 프로그램 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio에서 파일 폴더 구분 (포함 경로 설정)Visual Studio에서 c, cpp, h, hpp 파일을 폴더로 나누고 싶었습니까? 어쩌면 대부분의 사람들이 있다고 생각합니다. 처음에 파일이 만들어지는 장소는 프로젝트 파일 등과 같은 장소에 있기 때문에 파일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.