如何使用visual studio2019建立簡單的MFC視窗(使用C++)
阿新 • • 發佈:2020-03-13
本文介紹瞭如何使用visual studio2019建立簡單的MFC視窗(使用C++)
```cpp
使用visual studio 2019 建立過程請參考Bili的上一篇文章⬇⬇
→!使用visual studio 2019 建立簡單的MFC視窗「使用底層的C語言」
#include<windows.h> //底層實現視窗的標頭檔案 //6.處理視窗過程 //CALLBACK 代表_stdcall 引數的傳遞順序:從右到左依次入棧,並且函式返回前清空堆疊 LRESULT CALLBACK WindowProc(HWND hand,//訊息所屬視窗控制代碼 UINT uMsg,//具體訊息名稱 WM_XXXX訊息名 WPARAM wParam,//鍵盤附加訊息 LPARAM lParam) { //滑鼠附加訊息 switch (uMsg) { case WM_CLOSE: //所有以XXXXWindow為結尾的方法,都不會進入到訊息佇列中,而是直接執行 DestroyWindow(hand);//傳送另一個訊息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,TEXT("hello"),strlen("hello")); EndPaint(hand,&ps); break; } default: break; } //返回值用預設處理方式 return DefWindowProc(hand,uMsg,wParam,lParam); } /*程式入口函式 _In_ HINSTANCE hInstance,//應用程式例項控制代碼 _In_opt_ HINSTANCE hPrevInstance,//上一個應用程式控制代碼,在WIN32環境下一般為NULL,不起作用了 _In_ LPSTR lpCmdLine,//char * argv[] _In_ int nShowCmd//顯示命令 最大化、最小化、正常 WINAPI 代表_stdcall 引數的傳遞順序:從右到左依次入棧,並且函式返回前清空堆疊*/ int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd ) { /* 1.設計視窗 2.註冊視窗 3.建立視窗 4.顯示和更新 5.通過迴圈取訊息 6.處理訊息(視窗過程) */ //1.設計視窗 WNDCLASS wc; wc.cbClsExtra = 0; //類的額外的記憶體 wc.cbWndExtra = 0; //視窗額外的記憶體 wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //設定背景 wc.hCursor = LoadCursor(NULL,IDC_HAND); //設定游標,如果第一個引數為null,代表使用系統提供的游標 wc.hIcon = LoadIcon(NULL,IDI_ERROR); //圖示,如果第一個引數為null,代表使用系統提供的圖示 wc.hInstance = hInstance; //應用程式的例項控制代碼,傳入winmain的形參即可 wc.lpfnWndProc = WindowProc; //回撥函式 視窗過程 wc.lpszClassName = TEXT("WIN"); //指定視窗名稱 wc.lpszMenuName = NULL; //選單名稱 wc.style = 0; //顯示風格,0代表預設 //2.註冊視窗 RegisterClass(&wc); //3.建立視窗 /*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,NULL,hInstance,NULL); //4.顯示和更新 ShowWindow(hwnd,SW_SHOWNORMAL); UpdateWindow(hwnd); /*HWND hwnd; //主視窗控制代碼 UINT message; //具體訊息名稱 WPARAM wParam; //附加訊息 鍵盤訊息 LPARAM lParam; //附加訊息 滑鼠訊息 DWORD time; //訊息產生時間 POINT pt;*/ //附加訊息 滑鼠訊息 x,y //5.通過迴圈取訊息 MSG msg; /* _Out_ LPMSG lpMsg,//訊息 _In_opt_ HWND hWnd,//捕獲視窗 填null表示捕獲所有視窗 _In_ UINT wMsgFilterMin,//最大和最小的過濾訊息 一般填0 _In_ UINT wMsgFilterMax);*/ while (GetMessage(&msg,0)) { /*if (GetMessage(&msg,0) == FALSE) { break; }*/ //翻譯訊息 TranslateMessage(&msg); //不是false //分發訊息 DispatchMessage(&msg); } return 0; }
劃重點:專案->屬性->常規->高階->將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() { //建立視窗 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,point.y); MessageBox(str); } void MyFrame::OnChar(UINT key,UINT) { CString str; str.Format(TEXT(“按下了%c鍵”),key); MessageBox(str); } void MyFrame::OnPaint() { CPaintDC dc(this); dc.TextOutW(100,TEXT(“為了部落”)); dc.Ellipse(10,10,100); }
到此這篇關於如何使用visual studio2019建立簡單的MFC視窗(使用C++)的文章就介紹到這了,更多相關vs2019建立MFC視窗內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!