您好,登錄后才能下訂單哦!
本文介紹了如何使用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ù)瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。