C语言开发windows程序主要程序结构

news/2024/10/2 6:48:10

一、两个函数

1.WinMain,WindowsAPI 主函数。本次示例中WinMain包含的三个内容:+.注册窗口+.创建窗口+.消息循环
2.窗口过程(WndProc)窗口过程,通过窗口过程(WndProc)与用户交互和管理窗口。

二、Windows程序示例

基于C语言开发的windows图形界面程序

/**
*	title:Windows 程序
*	date:2024-10-02 
*	author:lanyu
* 	version:C99,C11
*	info:其实窗口过程函数写法都是一个样的。
*/#include <windows.h>
LPCWSTR reg_class=TEXT("WindowsProgram");  
//声明窗口过程函数。
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
//Windows 应用程序接口函数WinMain(主函数)
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrveInstance,LPSTR szCmdLine,int iCmdShow){//窗口注册WNDCLASS wndclass;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.hInstance=hInstance;wndclass.hBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.lpszMenuName=NULL;wndclass.lpszClassName=reg_class;wndclass.lpfnWndProc=WndProclif(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("The Program register class failure."),TEXT("ERROR"),MB_OK|MB_ICONERROR);return 0;}//窗口创建HWND hwnd;hwnd=CreateWindow(reg_class,TEXT("Windows应用程序"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,hInstance,NULL,NULL);ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);//定义消息循环while(GetMessage(&msg,hwnd,0,0)>0){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;
}
//定义窗口过程函数内容
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){switch(msg){default:return DefWindowProc(hwnd,msg,wParam,lParam);}return 0;
}

三、各部分解释

接口函数

WINAPI: 原型为__stdcall修饰符,使用window的函数调用方式。

CALLBACK:原型为__stdcall修饰符,使用window的函数调用方式。[和WINAPI一样的作用,可以不区分,但为了语法严谨不建议。]

HINSTANCE:实例句柄。这里的WinMain参数中hInstance实例的句柄是指本程序。参数中第二个hPrveInstance为上一个实例的句柄(以后Windows只会为这个参数传入NULL值)

LPSTR:字符指针,指向一个传入程序的字符串。

INT:原型int,标识这个程序打开后显示方式:显示、隐藏、全屏、最小化等。


窗口注册

WNDLCASS:窗口类结构体

字段 设置
cbWndExtra 窗口附加内存
cbClsExtra 注册类附加内存
style 类样式
hCursor 光标
hIcon 图标
hbrBackground 背景
lpszClassName 注册窗口名
lpszMenuName 菜单[字符串、ID]
lpfnWndProc 窗口过程函数

LoadCursor:加载鼠标光标宏,原型 HCURSOR LoadCursor(HISNTANCE,LPWSTR)

LoadIcon:加载应用图标,原型HICON LoadIcon(HINSTANCE,LPWSTR)

GetStockObject:加载windows默认对象。

RegisterClass:注册窗口。通过指针指向窗口注册结构体。


创建窗口

CreateWindow():创建windows窗口。窗口创建成功后返回一个窗口句柄,这时窗口在桌面是不显示的。

意义 参数
窗口注册字符串 LPCWSTR
窗口名称 LPCWSTR
样式 UINT
X坐标 int
Y坐标 int
int
int
父程序 HWND
菜单 HMENU
实例句柄 HINSTANCE
构建结构体的指针 LPVOID

ShowWindow:显示窗口。第一个参数由CreateWindow返回的窗口句柄,第二个参数是窗口显示的标志位。

UpdateWindow:更新窗口。传递一个窗口句柄。

消息循环

MSG:消息结构体

字段 意义
HWND 窗口句柄
UINT 消息ID
WPARAM 字符型参数
LPARAM 长整型参数
DWPRD 时间戳
POINT 鼠标坐标

GetMessage:获取Widnows操作消息。第一个为指向MSG结构体的指针、第二个为窗口句柄、第三个为最低消息整数值、第四个为最高消息整数值。

TranslateMessage: 翻译键盘消息

DispatchMessage:这个函数会调用WndProc(窗口过程函数)


附加

本示例中窗口过程函数被缩减,目的在于示例。(如下仍然不是最简,最简可以直接调用默认窗口过程。)

	LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){return DefWindowProc(hwnd,msg,wParam,lParam);}

编译命令,假设源文件为: test.c

	gcc -Wshadow -Wall -mwindows -DUNICODE=1 -g test.c -o out.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/67002.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

c语言作业

取代回车的位置

VSCode配置C/C++开发环境

VSCode配置C/C++开发环境 本教程基于以下视频制作 视频地址 工具VS Code 下载地址MinGW-w64编译器(x86_64-win32-seh) 下载地址工具配置 MinGW-w64环境变量将MinGW-w64下的bin文件夹的路径配置到环境变量path中通过终端(cmd)命令where gcc 验证,会得到相关路径 如下图下载VS Co…

R-和-JavaScript-高级数据可视化-全-

R 和 JavaScript 高级数据可视化(全)原文:Pro Data Visualization Using R and JavaScript 协议:CC BY-NC-SA 4.0一、背景 当本文的第一版发布时,在 web 开发领域出现了一个新概念:使用数据可视化作为交流工具。今天,网络上到处都是信息图;然而,这个概念在其他领域和部…

P5661 [CSP-J2019] 公交换乘P2952 [USACO09OPEN] Cow Line S

自己写的第一个c++博客(因为懒得写两个,所以合成一篇写) [CSP-J2019] 公交换乘 题目描述 著名旅游城市 B 市为了鼓励大家采用公共交通方式出行,推出了一种地铁换乘公交车的优惠方案:在搭乘一次地铁后可以获得一张优惠票,有效期为 45 分钟,在有效期内可以消耗这张优惠票,…

关于实体机安装Ubuntu 22.04.3-desktop-amd64遇见的一些问题

安装准备:U启动盘,Ubuntu系统 插入启动盘,开启电脑选择启动项为U启动(我的电脑为F12)安装Ubuntu系统选启动盘启动后,出现Ubuntu的图标后直接黑屏,无法看到安装界面。 原因:linux内核要加载第三方显卡驱动nouveau驱动。 解决方法:在启动出现Ubuntu的图标后,在选择安装…

忘记帝国 CMS 密码怎么办?教你一招轻松重置

如果您无法通过“找回密码”功能重置密码,可以尝试手动重置密码。备份数据库:在开始任何操作之前,请先备份数据库,以防万一。连接数据库:使用数据库管理工具(如 phpMyAdmin)连接到帝国CMS的数据库。找到用户表:导航到用户表,通常是 phome_enewsuser。查找用户记录:在…

dedecms(织梦)网站安全防护设置

织梦CMS 是国内常用的免费开源管理系统之一,但由于其广泛使用,也存在许多已知的安全漏洞。为了提高织梦CMS网站的安全性,以下是一些有效的安全防护设置步骤: 1. 修改网站后台的访问路径修改后台路径:默认后台路径为 http://域名/dede/。 修改为更复杂的路径,例如 http://…

静态QQ登录代码学习

记录学习 @搬砖界泰斗这只小狐狸 的静态QQ登陆页面源码,了解静态登陆页面如何书写&&拓宽自己对css的理解 Q1:用css调节子级元素位置时什么时候调节margin,什么时候调节padding? A1:margin对外,padding对内 e.g.要实现一个这样的排版 有一个大大盒子fafather,里面…