cwindows应用程序的唯一入口点是

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cwindows应用程序的唯一入口点是相关的知识,希望对你有一定的参考价值。

热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

c++ 桌面应用程序
打开APP

使用C++代码创建一个Windows桌面应用程序 转载
2019-12-04 14:45:20

anmily0566

码龄3年

关注
下面六星教育整理使用C++代码创建一个Windows桌面应用程序,供大家学习参考。
WinMain函数

Windows应用程序的唯一程序入口。

函数原型

int WINAPI WinMain

HINSTANCE hInstancem
HINSTANCE hPreInstance,
LPSTR lpCmdLine,
int nCmdShow

WINAPI定义如下

#define WINAPI _stdcall

_stdcall是一个函数调用约定,除此之外,还有__cdecl,fastcall,thiscall,naked call等函数调用约定。

_stdcall调用约定又称Pascal调用约定,也是Pascal语言的调用约定。它使用的方式为:

1 int __stdcall sum(int a,int b);
__stdcall:函数的多个参数由调用者按从右到左的顺序压入堆栈,被调用函数获得参数的序列是从左到右的的;清理堆栈的工作由被调用函数负责。
在Visual C++中,常用宏WINAPI或CALLBACK来表示__stdcall调用约定。

更详细的说明可以查看

https://docs.microsoft.com/en-us/cpp/cpp/stdcall?view=vs-2019

__cdecl(也可写成_cdecl)调用约定又称C调用约定,是C函数默认的调用约定,也是C++全局函数的默认调用约定,通常省略。


int sum(int a,int b);
int __cdecl sum(int a,int b);
__cdecl:函数的多个参数由调用者按从右向左的顺序压入堆栈,被调函数获得参数的序列是从左到右的;清理堆栈的工作由调用者负责

更详细的说明可以查看
https://docs.microsoft.com/en-us/cpp/cpp/cdecl?view=vs-2019

WinMain函数的各参数说明

hInstance

应用程序当前运行的实例的句柄,该句柄由Windows系统生成。

hPrevInstance

当前实例的前一个实例的句柄,在Win32环境下,该参数总是NULL,不再起作用

lpCmdLine

一个以空终止的字符串,代表传递给程序的命令行参数。

nCmdShow

指定窗口的显示状态

常用值如下

nCmdShow = 0;不显示

nCmdShow = 1;正常显示(默认)

nCmdShow = 2;最小化显示

nCmdShow = 3;最大化显示

使用代码创建Windows程序的步骤

1、设计一个Windows类

2、在Windows系统中注册Windows类

3、用该Windows类创建一个窗口

4、创建一个消息循环

5、创建一个窗口过程函数WndProc

一、设计Windows类

在创建一个窗口前,必须对窗口进行设计,指定窗口的属性。系统已经定义了WNDCLASS结构用于描述待创建窗口的参数。

WNDCLASS声明如下

typedef struct tagWNDCLASSA
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCSTR lpszMenuName;
LPCSTR lpszClassName;
WNDCLASSA, *PWNDCLASSA, *NPWNDCLASSA, *LPWNDCLASSA;

下面介绍各参数

style

窗口样式,可用值如下

CS_VREDRAW:垂直重绘,当窗口垂直方向上的高度发生变化时,将重新绘制整个窗口。如果没有指定这一样式,在垂直方向上调整窗口高度时,将不会重绘窗口。

CS_HREDRAW:水平重绘,当窗口水平方向上的宽度发生变化时,将重新绘制整个窗口。如果没有指定这一样式,在水平方向上调整窗口高度时,将不会重绘窗口。

CS_OWNDC:独占设备描述表,为该类中的每个窗口分配一个单值的设备描述表。

CS_SAVEBITS:在一个窗口中保存用户图像,以便于在该窗口被遮住、移动时不必每次刷新屏幕。但是,这样会占用更多的内存,并且比人工进行同样操作时要慢得多。

CS_DBLCLKS:使窗口可以检测到鼠标双击事件,当用户在窗口中双击鼠标时,向窗口过程发送鼠标双击消息

CS_BYTEALLGNCLIENT:鼠标用户区域按字节对齐显示。

CS_BYTEALLGNWINDOW:鼠标用户窗口按字节对齐显示。

CS_PARENTDC:在父窗口中设定一个子窗口的剪切区,以便于子窗口能够画在父窗口中。

CS_NOCLOSE:系统菜单中没有CLOSE菜单项,窗口没有关闭按钮。

lpfnWndProc

指向窗口过程函数的函数指针。窗口过程函数是一个回调函数,针对Windows的消息处理机制,窗口过程函数被调用的过程如下:

1、在设计窗口类的时候,将窗口过程函数的地址赋给lpfnWndProc成员变量

2、调用RegisterClass(&wndclass)注册窗口类,系统就有了用户编写的窗口过程函数的地址

3、当应用程序接收到某一窗口的信息时,调用DispatchMessage(&msg)将消息回传给系统。系统则利用先前注册窗口类时得到的函数指针,调用窗口过程函数对消息进行处理

cbClsExtra

Windows系统为窗口类结构分配追加的额外字节数。一般为0

cbWndExtra

Windows系统为窗口实例分配或追加的额外字节数,一般为0。如果应用程序使用资源文件里的CLASS指令创建对话框,并用WNDCLASS结构注册对话框框时,cbWndExtra必须设置成DLGWINDOWEXTRA

hInstance

包含窗口过程程序的实例句柄。一般直接赋WinMain()的hInstance即可

hIcon

窗口类的图标资源。这个成员变量必须是一个图标资源的句柄。可以使用LoadIcon()函数加载图标,如果hIcon为NULL,窗口将使用系统提供的默认图标

hCursor

窗口类的光标句柄。这个成员变量必须是一个光标资源的句柄。可以使用LoadCursor()函数加载光标。如果hCursor为NULL,应用程序必须在鼠标进入应用程序窗口时,明确设置光标的形状

hbrBackground

窗口类的背景画刷句柄。当窗口发生重绘时,系统使用这里指定的画刷来填充窗口的背景。该成员可以指定为用于绘制背景的物理画刷的句柄,也可以指定为标准的系统颜色值。如下:

BLACK_BRUSH 黑色

DKGRAY_BRUSH 深灰

GRAY_BRUSH 灰色

HOLLOW_BRUSH 空

LTGRAY_BRUSH 浅灰

NULL_BRUSH 等同于HOLLOW_BRUSH

WHITE_BRUSH 白色

BLACK_BRUSH 黑色

lpszMenuName

指向一个以空终止的字符串,该字符串描述菜单的资源名。若使用整数来标识菜单,需要用MAKEINTRESOURCE宏来进行转换。如果lpszMenuName设置为NULL,那么基于窗口类创建的窗口将没有默认菜单

lpszClassName

指向一个以空终止的字符串,该字符串描述窗口类的名字。这个类名可以是由RegisterClass或者RegisterClassEx注册的名字,或者是任何预定义的控件类名

WNDCLASS使用实例如下

WNDCLASS wc;

二、注册Windows类

Windows类设计完成时,需要调用RegisterClass()函数去注册这个类,才可以创建该类型的窗口

ATOM RegisterClass(
const WNDCLASSA *lpWndClass
);
注册代码如下

if(!RegisterClass(&wc))

return 0;


三、创建窗口

使用CreateWindow函数创建窗口,如果函数调用成功,返回值为新窗口的句柄;如果调用失败,返回值为NULL。可以使用GetLastError()函数获取错误信息

HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hInstance,
PVOID lpParam
);
《C/C++入门到精通企业级项目实战http://ke.qq.com/course/349354》来自世界百强公司一线互联网的大师执教,分享多年宝贵开发经验,全程项目实战贯穿,由浅入深通俗易懂。如果对C++感兴趣的话,想学C++培训的,可以搜索六星教育C++培训,我们将竭诚为你解答。

原文链接:https://www.baidu.com
打开CSDN,阅读体验更佳

C++桌面应用开发(Qt学习)——QMainWindow(2)_尐鸣的博客_c++...
设置到窗口中 setStatusBar(statusBar); statusBar->addWidget(label);放左侧信息 代码如下: ··· //状态栏 最多一个,在窗口最下侧 QStatusBar *statusBar = new QStatusBar(this); //放入到窗口中 setStatusBar(statusBar); /...
C++桌面应用开发(Qt学习)——对话框(1)_尐鸣的博客_c++桌面应...
connect(ui->actionnew,&QAction::triggered,[=]() // QDialog dlg2(this);// 该对象创建在栈中,执行完lambda就销毁,对话框一闪而过 // dlg2.show(); //非模态 ​ QDialog *dlg2 = new QDialog(this);//该对象创...
C++桌面程序 扫雷教学
扫雷游戏制作 桌面程序 Windows桌面程序 C/C++都能学会 没有类 想玩的写可以下载到桌面游玩
继续访问

使用 C++ 创建你的第一个 Metro 风格应用
WindowsMetro 风格应用专门针对 Windows 8 Consumer Preview 所提供的用户体验量身定制。每个出色的 Metro 风格应用都遵循特定的设计准则,这使得此类应用与传统的桌面应用相比外观更漂亮、反应更灵敏、行为更直观。开始创建 Metro 风格应用之前,建议你先阅读新模型的设计理论。你可以在设计 Metro 风格的应用中找到详细信息。 在此,我们介绍了有助于你使
继续访问
如何创建一个最简单的Windows桌面应用程序 (C++)_随煜而安的博客-CSDN...
正如每个 C/C++控制台应用程序在起始点必须具有 main 函数,每个基于 Win32 的应用程序的函数也必须具有 WinMain 函数。WinMain就相当于是入口函数,并且具有固定的语法: intWINAPIWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR...
1.2编写C++应用程序&1.3学习桌面应用程序的编程_xky1306102chenhong的博...
1.Visual C++可以开发的应用程序有两大类:桌面应用程序和Windows Store 应用程序。 2.本书关注如何使用MFC(Microsoft Foundation Classes)和C++建立桌面应用程序。 3.windows桌面应用程序的应用程序编程接口称为Win 32 ...
热门推荐 如何创建一个最简单的Windows桌面应用程序 (C++)
如何创建一个最简单的Windows桌面应用程序 (C++) 最近刚开始学习C/C++开发Windows应用程序,这里将会以零基础的视角把学习过程完全记录下来。如果你也刚刚起步,那本文一定非常适合你。 进入正题,本文讨论如何使用Visual Studio生成一个最简单的C窗体应用程序,并向用户显示Hello~ 下面我们一步步来介绍,对于涉及代码的地方,我们
继续访问
C语言开发windows桌面程序,演练:创建传统的 Windows 桌面应用程序 (c + +)
演练:创建传统的 Windows 桌面应用程序 (c + +)05/28/2020本文内容本演练演示如何在 Visual Studio 中创建传统的 Windows 桌面应用程序。 要创建的示例应用程序使用 Windows API 显示 "Hello,Windows desktop!" 应用程序。 可以将本演练中开发的代码作为模式来创建其他 Windows 桌面应用程序。Windows API (...
继续访问

Qt-跨平台的C++图形用户界面应用程序框架(一)_十年编程老舅的博客-CSD...
经过这几年的发展,Qt不但拥有了完备的C++图形库,而且也极大的提高了Qt开发跨平台应用程序的能力。 Qt可以同时支持桌面应用程序开发、嵌入式开发和移动开发,甚至它可以做移动开发,覆盖了现有的所有主流平台。你只需要编写一次代码,发布到不...
c++桌面应用绘制图片api_桌面版应用程序的前世今生_weixin_39797324的博...
桌面版应用程序历史 桌面应用程序,又称为GUI程序。可以分为以下几个阶段: VB, 上古程序员的开发工具,曾经全球第一的开发语言,拖拽式的图形化开发让它成为极佳的桌面开发工具。微软依靠其操作系统的优势,一直压制同时期的竞争对手delphi。
C++桌面应用开发(Qt学习)——QMainWindow(1)
QMainWindow(1)
继续访问

c语言应用程序的开发步骤,C语言如何开发桌面GUI应用程序?
这里介绍一种非常简单的方法,使用GTK,一个基于C语言开发的跨平台图形工具包,可以直接使用C语言快速完成桌面GUI程序的开发,下面我简单介绍一下实现过程,主要内容如下:1.首先,下载安装GTK,这里有2种方法,一种是按照GTK官网的方法一步一步配置,还有一种是直接使用打包好的GTK-bundle包,这里以第二种方法为例,直接使用打包好的GTK-bundle包,这个可以直接在CSDN上找到下载,如下...
继续访问
C++桌面应用开发(Qt学习)--对象模型(对象树)_尐鸣的博客_c++...
这种机制在GUI程序设计中相当有用,例如:一个按钮有一个QShortcut(快捷键)对象作为其子对象,当我们删除按钮时,这个快捷键子对象理应被删除。 QWidget是能够在屏幕上显示的一切组件的父类
C++使用代码创建一个Windows桌面应用程序
WinMain函数 Windows应用程序的唯一程序入口。 函数原型 1 int WINAPI WinMain 2 3 HINSTANCE hInstancem 4 HINSTANCE hPreInstance, 5 LPSTR lpCmdLine, 6 int nCmdShow 7 WINAPI定义如下 #de...
继续访问
C++桌面应用开发(Qt学习)--Qt简介及第一个Qt程序
Qt简介及第一个Qt程序
继续访问

求助 ! API版HelloWorld
//wnd2.cpp#include "wnd2.h" //头文件//全局变量char szTitle[] = "Easy Hello Program"; //标题条字符串char szWindowClass[] = "W32"; //窗口类名char szMenuName[] = "NULL"; //菜单名/*********************
继续访问
C/C++程序怎么生成的
一个C/C++程序的生要经以下步骤: 1.编写文本代码,生成C或cpp文件,这时候它还是文本形式(人工编辑的代码形式) 2.编译,就是compile,由C编译程序对你写的代码进行词法和句法分析,发现并报告错误,有错时编译不能通过。如若无错,则生成中间代码,扩展名为obj,此时它便是二进制的了; 3.连接,在汇编里称link,在C里叫生成,即build,它的作用是生成可执行的exe文件。由于一个程序的源码可由多个文件组成。这些文件在第二步中分别编译,生成各自的目标文件(*.obj),这一步的作用便是将这些o
继续访问
创建一个 C++ 控制台应用程序项目
创建一个 C++ 控制台应用程序项目1. 先决条件2. 创建您的应用程序项目 C++ 程序员的通常起点是在命令行上运行的"Hello, world!"应用程序。这就是您将在此步骤中在 Visual Studio 中创建的内容。 1. 先决条件 在计算机上安装并运行带有 C++ 工作负载的 Visual Studio。如果尚未安装,请参阅在 Visual Studio 中安装 C++ 支持。 2. 创建您的应用程序项目 Visual Studio 使用 projects 来组织应用程序的代码,并使用 solu
继续访问

创建第一个C++应用程序
创建第一个C++应用程序 创建第一个C++应用程序 创建第一个C++应用程序
VS2017C++windows桌面应用程序项目OpenCV及Boost库测试
这里是一个VS2017的windows桌面应用程序项目,项目已经配置了64位的OpenCV4.0库和64位的Boost库,其中OpenCV库和Boost库都安装在D盘里,大家可以在项目的附加库目录和包含目录里查看安装位置,以便大家顺利编译,另外想要了解怎么配置的可以查看本人博客。
C++ 实现的一个小型的桌面管理程序
C++ 实现的一个小型的桌面管理程序。 这是一个小工具,可以添加程序的快捷方式, MFC VS2008
最新发布 1.1编写一个简单的C++程序

继续访问
【Visual Studio】Visual Studio 2019 创建 Windows 控制台程序 ( 安装 ‘使用 C++ 的桌面开发‘ 组件 | 创建并运行 Windows 控制台程序 )
一、安装 C++ 桌面开发组件、 二、创建并运行 Windows 控制台程序
继续访问

C/C++教程 第九章 —— windows编程入门
本章为该系列教程的第九章,主要讲解Windows编程中一个窗口的最基础实现
继续访问

小白学习C++的第四步:了解C++程序由编写到执行的过程
1
继续访问

使用WTL进行Windows桌面应用开发-第一部
<ol> <li> 基于Windows平台的ATL/WTL桌面应用程序开发. </li> <li> 使用C/C++作为开发语言, 开发Windows本地桌面程序. </li> <li> WTL界面库是MFC的替代选择, 是Win32界面编程的薄封装,可以说学会WTL开发即学会了Win32界面开发。 </li> <li> 适合中小型公司开发基于C/C++语言的客户端项目, 因为WTL可以进行快速开发,不需要其他语言. </li> <li> 由浅入深介绍WTL桌面开发涉及到的原理和技术, 从简单界面到自定义界面,自定义按钮表格都有介绍。 </li> <li> 在绘制窗口元素如文本,图形介绍了GDI和GDI+的常用的开发技巧。 </li> <li> 介绍了项目开发中遇到的一些细节问题. </li> <li> WTL配置少, 只有头文件,不需要编译为库, 性能高,不依赖第三方库,文件小, 运行快,调试方便, 升级方便。 </li> </ol>
继续访问

c++ 桌面应用程序
写评论

评论

7

点赞



分享
参考技术A 热门频道

首页

博客

研修院

VIP

APP

问答

下载

社区

推荐频道

活动

招聘

专题

打开CSDN APP
Copyright © 1999-2020, CSDN.NET, All Rights Reserved

c++写桌面程序
打开APP

使用C++代码创建一个Windows桌面应用程序 转载
2019-12-04 14:45:20

anmily0566

码龄3年

关注
下面六星教育整理使用C++代码创建一个Windows桌面应用程序,供大家学习参考。
WinMain函数

Windows应用程序的唯一程序入口。

函数原型

int WINAPI WinMain

HINSTANCE hInstancem
HINSTANCE hPreInstance,
LPSTR lpCmdLine,
int nCmdShow

WINAPI定义如下

#define WINAPI _stdcall

_stdcall是一个函数调用约定,除此之外,还有__cdecl,fastcall,thiscall,naked call等函数调用约定。

_stdcall调用约定又称Pascal调用约定,也是Pascal语言的调用约定。它使用的方式为:

1 int __stdcall sum(int a,int b);
__stdcall:函数的多个参数由调用者按从右到左的顺序压入堆栈,被调用函数获得参数的序列是从左到右的的;清理堆栈的工作由被调用函数负责。
在Visual C++中,常用宏WINAPI或CALLBACK来表示__stdcall调用约定。

更详细的说明可以查看

https://docs.microsoft.com/en-us/cpp/cpp/stdcall?view=vs-2019

__cdecl(也可写成_cdecl)调用约定又称C调用约定,是C函数默认的调用约定,也是C++全局函数的默认调用约定,通常省略。


int sum(int a,int b);
int __cdecl sum(int a,int b);
__cdecl:函数的多个参数由调用者按从右向左的顺序压入堆栈,被调函数获得参数的序列是从左到右的;清理堆栈的工作由调用者负责

更详细的说明可以查看
https://docs.

苹果税不用交了?App Store 不再是应用下载唯一入口……

整理 | 朱珂欣   

出品 | CSDN程序人生(ID:coder_life)

众所周知, iPhone 和 iPad 用户需要下载应用软件,只能通过苹果 App Store 这个唯一的路径。

然而,近日 Bloomberg News (彭博社)报道称,苹果开始计划让用户在 iOS 上安装第三方应用商店。知情人士透露,目前苹果的这个计划已经让软件工程师着手准备,预计这一变化可能会在明年的 iOS17 上出现。

任何的变动绝非偶然,作为与苹果长期秉持的政策完全相反的举措,动摇过多年来苹果一手建立的“围墙”,这是为何导致的呢?

回应欧盟“新法”

今年 11 月 1 日,欧盟《数字市场法》正式生效,它旨在规范大型互联网平台公司的运营行为,禁止在网络平台经济中有“看门人”( gatekeeper )地位的公司的不公平竞争行为,以确保数字市场的公平和开放。

欧盟在新闻稿中提及,这些公司必须遵守该法案的日期是 2024 年 3 月 6 日。

或许是大势所趋,严格的新规让苹果不得不做出回应。如果苹果拒绝遵守《数字市场法》,欧盟可以处以全球收入 20% 的罚款。就目前苹果收入而言,罚款可能高达 800 亿美元。

多年来,许多监管机构和软件制造商一直抱怨苹果和谷歌这两家最大的移动应用商店运营商拥有太多权力。

当欧盟《数字市场法》生效,这也意味着苹果不仅必须允许第三方应用程序商店,而且还必须允许侧载(侧载指不通过官方应用商店、不受任何限制进行安装测试第三方应用的运行模式 ),用户可以在其中安装从网络下载的软件。

App Store 有何不同?

一直以来,苹果独立的生态一向以安全性极佳、维护用户隐私数据自居,将 App Store 描称为“值得信赖的地方”,所有应用都会经过层层筛选。

那么, App Store 与安卓应用市场存在哪些差异性?

首先,谷歌的安卓系统是开放给所有手机厂商的,再加上谷歌并没有自己的硬件生态,需要依赖其他手机厂商来做大安卓手机的规模,对于软硬件生态的掌控力都非常弱。但是,苹果是从硬件到 iOS 操作系统软件生态,都是配备自己的操作系统和硬件。

 网友:开放了的苹果还是苹果吗?

关于“苹果 iOS 的应用商店 App Store 是否应该开放”,在早前就是支持派和反对派各执一词。

认为 App Store 应该开放的网友表示:

  • “苹果仗着 App Store 的封闭性,大发横财”;

  • “使用苹果相关产品的服务,要比安卓用户多交一笔‘苹果税’”。

而反对 App Store 开放的网友认为:

  • “非常喜欢 App Store的应用生态,安卓的太乱太杂”;

  • “开放了的苹果可能就不是苹果了”。

对此,你怎么看?可以在评论区留言或参与投票。

参考链接:

  • https://www.theverge.com/2022/12/13/23507766/apple-app-store-eu-dma-third-party-sideloading

  • https://www.163.com/dy/article/HOHGBS340511B8LM.html

  • https://9to5mac.com/2022/12/13/apple-alternative-app-stores-iphone/

  • https://new.qq.com/rain/a/20220211A0C9QW00

《新程序员001-004》全面上市,对话世界级大师,报道中国IT行业创新创造!


 
☞魔法成为现实?武大学生团队造出了“隐身衣”,成本不到 500 元!
☞小扎遭 Meta 员工炮轰:元宇宙将“杀死”公司!
☞“元宇宙”火了,它到底是啥?

以上是关于cwindows应用程序的唯一入口点是的主要内容,如果未能解决你的问题,请参考以下文章

nextjs应用程序的入口点是吗?

Servlet的程序入口点是哪个方法()?

Python 标准库的入口点是如何注册的?

window.location.href后面带参数怎么加

如何找到 Spring Boot 应用程序的入口点?

无法从应用引擎访问 Google 云功能(带有入口控制)