如何使用visual studio2019创建简单的MFC窗口(使用C++)
本文介绍了如何使用visualstudio2019创建简单的MFC窗口(使用C++)
→!使用visualstudio2019创建简单的MFC窗口「使用底层的C语言」
#include//底层实现窗口的头文件 //6.处理窗口过程 //CALLBACK代表_stdcall参数的传递顺序:从右到左依次入栈,并且函数返回前清空堆栈 LRESULT CALLBACKWindowProc(HWNDhand, //消息所属窗口句柄 UINTuMsg,//具体消息名称WM_XXXX消息名 WPARAMwParam,//键盘附加消息 LPARAMlParam){//鼠标附加消息 switch(uMsg) { caseWM_CLOSE: //所有以XXXXWindow为结尾的方法,都不会进入到消息队列中,而是直接执行 DestroyWindow(hand);//发送另一个消息WM_DESTROY break; caseWM_DESTROY: PostQuitMessage(0); break; caseWM_LBUTTONDOWN://鼠标左键按下 { intxPos=LOWORD(lParam); intyPos=HIWORD(lParam); charbuf[1024]; wsprintf(buf,TEXT("x=%d,y=%d"),xPos,yPos); MessageBox(hand,buf,TEXT("按下鼠标左键"),MB_OK); break; } caseWM_KEYDOWN: //键盘 { MessageBox(hand,TEXT("键盘"),TEXT("按下键盘"),MB_OK); break; } caseWM_PAINT: //画图 { PAINTSTRUCTps; //画图结构体 HDChdc=BeginPaint(hand,&ps); TextOut(hdc,100,100,TEXT("hello"),strlen("hello")); EndPaint(hand,&ps); break; } default: break; } //返回值用默认处理方式 returnDefWindowProc(hand,uMsg,wParam,lParam); } /*程序入口函数 _In_HINSTANCEhInstance,//应用程序实例句柄 _In_opt_HINSTANCEhPrevInstance,//上一个应用程序句柄,在WIN32环境下一般为NULL,不起作用了 _In_LPSTRlpCmdLine,//char*argv[] _In_intnShowCmd//显示命令最大化、最小化、正常 WINAPI代表_stdcall参数的传递顺序:从右到左依次入栈,并且函数返回前清空堆栈*/ intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnShowCmd ){ /* 1.设计窗口 2.注册窗口 3.创建窗口 4.显示和更新 5.通过循环取消息 6.处理消息(窗口过程) */ //1.设计窗口 WNDCLASSwc; 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 //附加值鼠标附加值*/ HWNDhwnd=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); /*HWNDhwnd; //主窗口句柄 UINTmessage; //具体消息名称 WPARAMwParam; //附加消息键盘消息 LPARAMlParam; //附加消息鼠标消息 DWORDtime; //消息产生时间 POINTpt;*/ //附加消息鼠标消息x,y //5.通过循环取消息 MSGmsg; /* _Out_LPMSGlpMsg, //消息 _In_opt_HWNDhWnd, //捕获窗口填null表示捕获所有窗口 _In_UINTwMsgFilterMin, //最大和最小的过滤消息一般填0 _In_UINTwMsgFilterMax);*/ while(GetMessage(&msg,NULL,0,0)) { /*if(GetMessage(&msg,NULL,0,0)==FALSE){ break; }*/ //翻译消息 TranslateMessage(&msg); //不是false //分发消息 DispatchMessage(&msg); } return0; }
头文件mfc.h
#include//mfc头文件 classMyApp:publicCWinApp{ public: virtualBOOLInitInstance(); }; classMyFrame:publicCFrameWnd{//窗口框架类 public: MyFrame(); //声明宏提示消息映射机制 DECLARE_MESSAGE_MAP(); afx_msgvoidOnLButtonDown(UINT,CPoint); afx_msgvoidOnChar(UINT,UINT,UINT); afx_msgvoidOnPaint(); };
源文件mfc.cpp
#include“mfc.h” MyAppapp; BOOLMyApp::InitInstance(){ //创建窗口 MyFrame*frame=newMyFrame; //显示和更新 frame->ShowWindow(SW_SHOWNORMAL); frame->UpdateWindow(); m_pMainWnd=frame;//保存指向应用程序的主窗口的指针 returnTRUE;//返回正常初始化 } //分界宏 BEGIN_MESSAGE_MAP(MyFrame,CFrameWnd) ON_WM_LBUTTONDOWN()//鼠标左键按下 ON_WM_CHAR() ON_WM_PAINT() END_MESSAGE_MAP() MyFrame::MyFrame() { Create(NULL,TEXT(“windows”)); } voidMyFrame::OnLButtonDown(UINT,CPointpoint) { //TCHARbuf[1024]; //wsprintf(buf,TEXT(“x=%d,y=%d”),point.x,point.y); //MessageBox(buf); CStringstr; str.Format(TEXT(“x=%d,y=%d”),point.x,point.y); MessageBox(str); } voidMyFrame::OnChar(UINTkey,UINT,UINT) { CStringstr; str.Format(TEXT(“按下了%c键”),key); MessageBox(str); } voidMyFrame::OnPaint() { CPaintDCdc(this); dc.TextOutW(100,100,TEXT(“为了部落”)); dc.Ellipse(10,10,100,100); }
到此这篇关于如何使用visualstudio2019创建简单的MFC窗口(使用C++)的文章就介绍到这了,更多相关vs2019创建MFC窗口内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。