您好,登錄后才能下訂單哦!
本文介紹了如何使用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, 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, 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; //消息產生時間 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, NULL, 0, 0)) { /*if (GetMessage(&msg, NULL, 0, 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,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創建簡單的MFC窗口(使用C++)的文章就介紹到這了,更多相關vs2019創建MFC窗口內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。