MFC入门

qq_40859659 2020-06-04 05:00:53
#include <windows.h> //底层实现窗口 的头文件

//6处理窗口过程

//CALLBACK 代表__stdcall 参数的传递顺序:从右到左 以此入栈,并且在函数返回前 清空堆栈
LRESULT CALLBACK WindowProc(
HWND hwnd, //消息所属的窗口句柄
UINT uMsg, //具体消息名称 WM_XXXX 消息名
WPARAM wParam, //键盘附加消息
LPARAM lParam //鼠标附加消息
)
{
switch (uMsg)
{
case WM_CLOSE:
//所有xxxWindow为结尾的方法 ,都不会进入到消息队列中,而是直接执行
DestroyWindow(hwnd); //DestroyWindow 发送另一个消息 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(hwnd, buf, TEXT("鼠标左键按下"), MB_OK);

break;
}
case WM_KEYDOWN: //键盘
MessageBox(hwnd, TEXT("键盘按下"), TEXT("键盘按下"), MB_OK);
break;

case WM_PAINT: //绘图
{
PAINTSTRUCT ps; //绘图结构体
HDC hdc = BeginPaint(hwnd, &ps);

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

EndPaint(hwnd, &ps);
}

break;
}




//返回值用默认处理方式
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

//程序入口函数

//WINAPI 代表__stdcall 参数的传递顺序:从右到左 以此入栈,并且在函数返回前 清空堆栈
int WINAPI WinMain(
HINSTANCE hInstance, //应用程序实例句柄
HINSTANCE hPrevInstance, //上一个应用程序句柄,在win32环境下,参数一般为NULL,不起作用了
LPSTR lpCmdLine, //char * argv[]
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、创建窗口
/*
lpClassName, 类名
lpWindowName, 标题名
dwStyle, WS_OVERLAPPEDWINDOW 风格
x, 显示坐标 CW_USEDEFAULT 默认值
y,
nWidth, 宽高
nHeight,
hWndParent, 父窗口 NULL
hMenu, 菜单 NULL
hInstance, 实例句柄 hInstance
lpParam) 附加值 NULL
*/

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);

//5、 通过循环取消息
/*
HWND hwnd; 主窗口句柄
UINT message; 具体消息名称
WPARAM wParam; 附加消息 键盘消息
LPARAM lParam; 附加消息 鼠标消息
DWORD time; 消息产生时间
POINT pt; 附加消息 鼠标消息 x y
*/
MSG msg;

while (GetMessage(&msg, NULL, 0, 0))
{
/*
_Out_ LPMSG lpMsg, 消息
_In_opt_ HWND hWnd, 捕获窗口 填NULL代表捕获所有的窗口
_In_ UINT wMsgFilterMin, //最小和最大的过滤的消息 一般填入0
_In_ UINT wMsgFilterMax) //填0代表捕获所有消息
*/
//if (GetMessage(&msg, NULL, 0, 0) == FALSE)
//{
// break;
//}

//翻译消息
TranslateMessage(&msg);

//不为false
//分发消息
DispatchMessage(&msg);

}





return 0;
}
...全文
531 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2020-08-02
  • 打赏
  • 举报
回复
已经处理 的 消息 要 return (不是break))不要再 calldef
  • 打赏
  • 举报
回复
引用 2 楼 ruan1978 的回复:
你刚开始学,这个基础的winmain去写下也好,了解这个运行机制。
我更喜欢WIN32(Windows桌面应用),和你的代码一样,WIN32主要就是消息机制,比如case XX之类的,MFC能做的WIN32都可以做出来,不过是时间问题,WIN32比MFC会自由很多,复杂性也低,要做中/大型开发的话就选WIN32. 小型开发(纯粹为了效率)的,用MFC,毕竟不可能花一大堆时间在小项目上面,MFC就是给你写好了界面,只需要关心功能了,但界面比WIN32的会丑一些. 如果真的要进MFC的话WIN32是一个很重要的基础,那些很会MFC的人WIN32基础是肯定很好的,所以还是从WIN32开始学要好. 文档: https://docs.microsoft.com/zh-cn/cpp/mfc/mfc-desktop-applications?view=vs-2019 注意:微软已经在一定程度上放弃MFC,一些内容不会再更新,
sichuanwww 2020-07-26
  • 打赏
  • 举报
回复
MFC在WINDOWS功能强大,需要C++,WINDOWS的运行机制…………………… 《易筋经》慢慢修炼吧
gx_wj 2020-07-10
  • 打赏
  • 举报
回复
我想知道MFC具体有什么用,需要什么基础知识
lunatic7 2020-06-21
  • 打赏
  • 举报
回复
问题是啥? 要是简单的窗口程序 直接用MFC 或者QT 没必要用winmain自己去画。
ruan1978 2020-06-21
  • 打赏
  • 举报
回复
你刚开始学,这个基础的winmain去写下也好,了解这个运行机制。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧