溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用visual studio2019創(chuàng)建簡單的MFC窗口(使用C++)

發(fā)布時間:2020-10-14 07:16:07 來源:腳本之家 閱讀:1181 作者:BiliIT 欄目:編程語言

本文介紹了如何使用visual studio2019創(chuàng)建簡單的MFC窗口(使用C++)

如何使用visual studio2019創(chuàng)建簡單的MFC窗口(使用C++)```cpp

使用visual studio 2019 創(chuàng)建過程請參考Bili的上一篇文章⬇⬇
→!使用visual studio 2019 創(chuàng)建簡單的MFC窗口「使用底層的C語言」

#include<windows.h>	//底層實現(xiàn)窗口的頭文件

//6.處理窗口過程

//CALLBACK 代表_stdcall 參數(shù)的傳遞順序:從右到左依次入棧,并且函數(shù)返回前清空堆棧

LRESULT	CALLBACK WindowProc(HWND hand,	//消息所屬窗口句柄

UINT uMsg, //具體消息名稱 WM_XXXX消息名

WPARAM wParam, //鍵盤附加消息

LPARAM lParam) { //鼠標附加消息

switch (uMsg)

{

case WM_CLOSE:

//所有以XXXXWindow為結尾的方法,都不會進入到消息隊列中,而是直接執(zhí)行

DestroyWindow(hand);//發(fā)送另一個消息WM_DESTROY

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

case WM_LBUTTONDOWN://鼠標左鍵按下

{

int xPos = LOWORD(lParam);

int yPos = HIWORD(lParam);

char buf[1024];

wsprintf(buf, TEXT("x = %d,y = %d"),xPos,yPos);

MessageBox(hand, buf, TEXT("按下鼠標左鍵"), MB_OK);

break;

}

case WM_KEYDOWN:	//鍵盤

{

MessageBox(hand, TEXT("鍵盤"), TEXT("按下鍵盤"), MB_OK);

break;

}

case WM_PAINT:	//畫圖

{

PAINTSTRUCT ps;	//畫圖結構體

HDC hdc = BeginPaint(hand, &ps);

TextOut(hdc, 100, 100,TEXT("hello"), strlen("hello"));

EndPaint(hand, &ps);

break;

}

default:

break;

}

//返回值用默認處理方式

return DefWindowProc(hand, uMsg, wParam, lParam);

}

/*程序入口函數(shù)

_In_ HINSTANCE hInstance,//應用程序實例句柄

_In_opt_ HINSTANCE hPrevInstance,//上一個應用程序句柄,在WIN32環(huán)境下一般為NULL,不起作用了

_In_ LPSTR lpCmdLine,//char * argv[]

_In_ int nShowCmd//顯示命令 最大化、最小化、正常

WINAPI 代表_stdcall 參數(shù)的傳遞順序:從右到左依次入棧,并且函數(shù)返回前清空堆棧*/

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd

) {

/*

1.設計窗口

2.注冊窗口

3.創(chuàng)建窗口

4.顯示和更新

5.通過循環(huán)取消息

6.處理消息(窗口過程)

*/

//1.設計窗口

WNDCLASS wc;

wc.cbClsExtra = 0;	//類的額外的內存

wc.cbWndExtra = 0;	//窗口額外的內存

wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //設置背景

wc.hCursor = LoadCursor(NULL, IDC_HAND);	//設置光標,如果第一個參數(shù)為null,代表使用系統(tǒng)提供的光標

wc.hIcon = LoadIcon(NULL, IDI_ERROR);	//圖標,如果第一個參數(shù)為null,代表使用系統(tǒng)提供的圖標

wc.hInstance = hInstance; //應用程序的實例句柄,傳入winmain的形參即可

wc.lpfnWndProc = WindowProc;	//回調函數(shù) 窗口過程

wc.lpszClassName = TEXT("WIN");	//指定窗口名稱

wc.lpszMenuName = NULL;	//菜單名稱

wc.style = 0;	//顯示風格,0代表默認

//2.注冊窗口

RegisterClass(&wc);

//3.創(chuàng)建窗口

/*lpszClassName,//類名

lpWindowName,	//標題名

dwStyle,	//風格 WC_OVERLAPPEDWINDOW

x, //坐標 CW_USERDEFAULT

y, //坐標

nWidth,	//寬

nHeight,	//高

hWndParent, //父窗口 null

hMenu,	//菜單 null

hInstance, //實例句柄

lpParam	//附加值 鼠標附加值*/

HWND hwnd = CreateWindow(wc.lpszClassName, TEXT("WINDOWS"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

//4.顯示和更新

ShowWindow(hwnd, SW_SHOWNORMAL);

UpdateWindow(hwnd);

/*HWND hwnd;	//主窗口句柄

UINT message;	//具體消息名稱

WPARAM wParam;	//附加消息 鍵盤消息

LPARAM lParam;	//附加消息 鼠標消息

DWORD time;	//消息產(chǎn)生時間

POINT pt;*/	//附加消息 鼠標消息 x,y

//5.通過循環(huán)取消息

MSG msg;

/*

_Out_ LPMSG lpMsg,	//消息

_In_opt_ HWND hWnd,	//捕獲窗口 填null表示捕獲所有窗口

_In_ UINT wMsgFilterMin,	//最大和最小的過濾消息 一般填0

_In_ UINT wMsgFilterMax);*/

while (GetMessage(&msg, NULL, 0, 0))

{

/*if (GetMessage(&msg, NULL, 0, 0) == FALSE) {

break;

}*/

//翻譯消息

TranslateMessage(&msg);

//不是false

//分發(fā)消息

DispatchMessage(&msg);

}

return 0;

}

劃重點:項目->屬性->常規(guī)->高級->將MFC的使用設置為在“共享dll中使用mfc”

頭文件mfc.h

#include <afxwin.h>//mfc頭文件

class MyApp:public CWinApp{

public:

virtual BOOL InitInstance();

};

class MyFrame :public CFrameWnd {//窗口框架類

public:

MyFrame();

//聲明宏 提示消息映射機制

DECLARE_MESSAGE_MAP();

afx_msg void OnLButtonDown(UINT,CPoint);

afx_msg void OnChar(UINT,UINT,UINT);

afx_msg void OnPaint();

};

源文件mfc.cpp

#include “mfc.h”

MyApp app;

BOOL MyApp::InitInstance() {

//創(chuàng)建窗口

MyFrame* frame = new MyFrame;

//顯示和更新

frame->ShowWindow(SW_SHOWNORMAL);

frame->UpdateWindow();

m_pMainWnd = frame;//保存指向應用程序的主窗口的指針

return TRUE;//返回正常初始化

}

//分界宏

BEGIN_MESSAGE_MAP(MyFrame, CFrameWnd)

ON_WM_LBUTTONDOWN()//鼠標左鍵按下

ON_WM_CHAR()

ON_WM_PAINT()

END_MESSAGE_MAP()

MyFrame::MyFrame()

{

Create(NULL,TEXT(“windows”));

}

void MyFrame::OnLButtonDown(UINT, CPoint point)

{

//TCHAR buf[1024];

//wsprintf(buf, TEXT(“x = %d,y = %d”), point.x, point.y);

//MessageBox(buf);

CString str;

str.Format(TEXT(“x = %d,y = %d”),point.x,point.y);

MessageBox(str);

}

void MyFrame::OnChar(UINT key, UINT, UINT)

{

CString str;

str.Format(TEXT(“按下了%c鍵”),key);

MessageBox(str);

}

void MyFrame::OnPaint()

{

CPaintDC dc(this);

dc.TextOutW(100,100,TEXT(“為了部落”));

dc.Ellipse(10,10,100,100);

}

到此這篇關于如何使用visual studio2019創(chuàng)建簡單的MFC窗口(使用C++)的文章就介紹到這了,更多相關vs2019創(chuàng)建MFC窗口內容請搜索億速云以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI