VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 103|回复: 0

[原创] 《C/C++ Windows 程序设计》 输出贴

[复制链接]
74_avatar_middle
最佳答案
0 
在线会员 发表于 2021-11-21 16:27:30 | 显示全部楼层 |阅读模式
学习《C/C++ Windows 程序设计》的第六天


                编译环境:Window10  VS2019

                学习目的:使用API创建第一个窗口程序

                涉及API:CreateWindow()|RegisterClassEx()|WindowProc()|TranslateMessage()|DispatchMessage()

                创建窗口流程:

                1、注册窗口类,指定窗口类的名称与窗口的回调函数;

                2、创建窗口,指定注册窗口类、窗口标题、窗口大小;

                3、显示窗口;

                5、开始消息循环

                5、窗口函数中处理窗口消息

                窗口代码:

                #include <Windows.h>
                #include <iostream>
                #include <tchar.h>

                using namespace std;

                //申明静态全局变量  窗口类名
                static TCHAR szWindowClass[] = _T("WindowClass");
                static TCHAR szTile[] = _T("我的第一个窗口程序");


                /*
                1、注册窗口类,指定窗口类的名称与窗口回调函数;
                2、创建窗口,指定注册窗口类,窗口标题,窗口大小;
                3、显示窗口;
                4、开始消息循环;
                5、窗口函数中处理窗口消息。
                */

                //第五步:窗口回调函数
                LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lparam)
                {
                        PAINTSTRUCT ps;
                        HDC hdc;
                        TCHAR greeting[] = _T("VC驿站越办越好!");

                        switch (uMsg)
                        {

                        case WM_PAINT:
                                hdc = BeginPaint(hWnd, &ps);
                                TextOut(hdc, 5, 5, greeting, _tcslen(greeting));
                                EndPaint(hWnd, &ps);
                                break;
                        case WM_DESTROY:
                                PostQuitMessage(0);
                                break;
                        default:
                                return DefWindowProc(hWnd, uMsg, wParam, lparam);
                                break;
                        }
                        return 0;
                }


                /*

                int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)

                照抄下来,在VS2005或VS2008编译的时候总会说error C2731 : “WinMain”: 无法重载函数。

                其实因为WinMain函数的原始定义中lpCmdLine的类型是char* ,但在中文系统的环境下因为启用了Unicode支持,LPTSTR代表的是                WCHAR* 。所以上述函数我们就应该这样来写:

                int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)

                */

                int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, INT nCmdShow)
                {
                        //第一步:注册窗口类,指定窗口类的名称与窗口回调函数
                        //创建WNDCLASSEX结构体存放窗口类,并初始化为空
                        WNDCLASSEX wcex = { 0 };
                        //可以根据大小来判断其系统类型
                        wcex.cbSize = sizeof(WNDCLASSEX);
                        //WindowProc 窗口消息处理指针函数
                        wcex.lpfnWndProc = WindowProc;
                        wcex.lpszClassName = szWindowClass;

                        if (!RegisterClassEx(&wcex))
                        {
                                //注册失败后,提出信息框
                                MessageBox(NULL, _T("注册窗口类失败"), _T("提示"), MB_OK);
                                return -1;
                        }



                        //第二步:创建窗口,指定注册窗口类,窗口标题,窗口大小
                        HWND hWnd= CreateWindow(szWindowClass,szTile,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,500,300,NULL,NULL,hInstance,NULL);

                        if (!hWnd)
                        {
                                MessageBox(NULL, _T("创建窗口失败"), _T("提示"), MB_OK);
                                return -1;
                        }

                        //父窗口创建成功后创建子窗口或控件



                        //第三步:显示窗口
                        ShowWindow(hWnd, nCmdShow);

                        //第四步:开始消息循环
                        MSG msg = { 0 };
                        while (GetMessage(&msg,NULL,0,0))
                        {
                                TranslateMessage(&msg);
                                DispatchMessage(&msg);
                        }


                        return (int)msg.wParam;
                }

                                                                                                                                                2021年11月21日




上一篇:《C/C++ Windows 程序设计》 输出贴
下一篇:从实例中学C语言 实例1_2( 1_2.cpp : 最简真分数的个数)
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-11-30 01:06

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表