第二篇 第一个窗口程序

汇编语言实验——文本比较 2.1实验内容 Windows界面风格实现两个文本文件内容的比对。若两文件内容一样,输出相应提示;若两文件不一样,输出对应的行号。 2.2实验环境 Microsoft Visual Studio 2017+masm 32 2.3实验思路 2.3.1 绘制界面 绘制界面上,我们调用WIN32库,首先初始化创建一个主窗口,之后在主窗口接受到WM_CREATE消息时创建3个按钮控件,分别为选择比较的第1个文件,选择比较的第2个文件,和执行比对三个功能。 _ProcWinMainprocuses.. 阅读详情

这篇博文介绍下一个简单的窗口的建立过程。

 

一、建立窗口的过程如下:

1、注册窗口类---利用建立的窗口类建立窗口---消息循环等待处理消息

2、主要的函数如下:

RegisterClassEx---[  CreateWindowEx    ShowWindow   UpdateWindow   ]

---[  GetMessage   TranslateMessage    DispatchMessage   ]

 

二、Windows的消息处理机制:

三、窗口代码:

.386
.model flat,stdcall
option casemap:none

include     windows.inc
include     gdi32.inc
includelib  gdi32.lib
include     user32.inc
includelib  user32.lib
include     kernel32.inc
includelib  kernel32.lib

.data?
hInstance   dd  ?
hWinMain    dd  ?

.const
szClassName     db      'MyClass',0
szCaptionMain   db      'My First Window !',0
szText          db      'Win32 Assembly,Simple and Powerful !',0

.code
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;_ProcWinMain就是窗口过程了
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
_ProcWinMain    proc    uses ebx edi esi,hWnd,uMsg,wParam,lParam
                local   @stPs:PAINTSTRUCT
                local   @stRect:RECT
                local   @hDc

                mov eax,uMsg

		;在调用UpdateWindow时发送WM_PAINT消息
		;绘制客服区
                .if     eax == WM_PAINT
                        invoke  BeginPaint,hWnd,addr @stPs
                        mov     @hDc,eax
                        invoke  GetClientRect,hWnd,addr @stRect
                        invoke  DrawText,@hDc,addr szText,-1,\
                                addr @stRect,\
                                DT_SINGLELINE or DT_CENTER or DT_VCENTER
                        invoke  EndPaint,hWnd,addr @stPs

		;点击了窗口右上方的‘X’时会发送WM_CLOSE消息
		;DestroyWindow用来销毁主窗口
		;PostQuitMessage用来发送WM_QUIT消息,不发送会发现窗口销毁进程任存在
		;因为消息循环还在
                .elseif eax == WM_CLOSE
                        invoke  DestroyWindow,hWinMain
                        invoke  PostQuitMessage,NULL

		;默认的窗口过程,用户不处理的消息都要交予TA处理,否则容易出错
                .else
                        invoke  DefWindowProc,hWnd,uMsg,wParam,lParam
                        ret

                .endif

                xor     eax,eax
                ret
_ProcWinMain    endp

_WinMain        proc
                local   @stWndClass:WNDCLASSEX
                local   @stMsg:MSG

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;注册窗口类
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
		;获得模块句柄hInstance
                invoke  GetModuleHandle,NULL
                mov     hInstance,eax

		;将 @stWndClass 变量清零,因为这是个struct,其中的一些变量我们
		;不关心也不会去设置,清零使得程序更加健壮和易于把握
                invoke  RtlZeroMemory,addr @stWndClass,sizeof @stWndClass

		;一下的内容就是设置各个需要的变量了
                invoke  LoadCursor,0,IDC_ARROW
                mov     @stWndClass.hCursor,eax
                push    hInstance
                pop     @stWndClass.hInstance
                mov     @stWndClass.cbSize,sizeof WNDCLASSEX

		;这里决定了窗口时可以变大变小的
                mov     @stWndClass.style,CS_HREDRAW or CS_VREDRAW 

		;这里指定了窗口的窗口过程
                mov     @stWndClass.lpfnWndProc,offset _ProcWinMain  

                mov     @stWndClass.hbrBackground,COLOR_HIGHLIGHT + 1

		;给窗口类指定名字
                mov     @stWndClass.lpszClassName,offset szClassName

                invoke  RegisterClassEx,addr @stWndClass

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;利用已经建立的窗口类建立窗口
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                invoke  CreateWindowEx,WS_EX_CLIENTEDGE,\
                        offset szClassName,offset szCaptionMain,\
                        WS_OVERLAPPEDWINDOW,\
                        100,100,600,400,\
                        NULL,NULL,hInstance,NULL
                mov     hWinMain,eax
                invoke  ShowWindow,hWinMain,SW_SHOWNORMAL
                invoke  UpdateWindow,hWinMain

;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;消息循环
;GetMessage进消息队列中取消息,如果是WM_QUIT则返回0,此时消息循环退出
;TranslateMessage是将键盘信息转换成ASCII码
;DispatchMessage会调用在窗口类注册时指定的窗口函数处理消息
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                .while  TRUE
                        invoke  GetMessage,addr @stMsg,NULL,0,0
                        .break  .if eax == 0
                        invoke  TranslateMessage,addr @stMsg
                        invoke  DispatchMessage,addr @stMsg
                        .endw

                        ret
_WinMain        endp

start:
                invoke  _WinMain
                invoke  ExitProcess,NULL        ;退出进程

                end     start


四、运行结果:

 

第一个windows API窗口程序 步骤编写WinMain函数设计窗口类注册窗口类创建窗口显示并更新窗口编写消息循环编写窗口过程函数总结整体源码第一次写Windows窗口程序,第一次写博客,遇到很多问题。 编写WinMain函数 WinMian函数格式固定,可以直接粘贴复制 int WINAPI WinMain(HINSTANCE hInstance, //应用程序实例 HINSTANCE hPrevInstance, //上一个应用程序实例,不用 LPSTR lpCmdLine, //命令行参数 int nCmdShow //窗口显示 阅读详情

相关推荐

【实操】第一个C++窗口程序

解决方案(参照): 1.新建MFC Active控件 (1)无法编译 (2)将属性-配置属性-链接器-逐用户重定向【否->是】 无效。      将同级目录下的注册输出改为否,可以编译,但是无法运行。      命令行注册.oxc文件,依然无效。   (3)最终放弃。 2.新建MFC app文件。 (1)打开主文件头文件,程序崩溃。 (2)在vs2010命令行下,运行d

程序员的一生时间90%是用在编程上,而剩余的10%是活在世界上。 1245

C指针原理(23)-win32汇编及.NET调试

2018-12-28 20:36:07 在WINDOWS系统能用到汇编的机会不多,基本都可以用C或C++代劳,更何况现在MICROSOFT的Visual Studio 系列工具非常强大,WINDOWS下的开发已经在向.NET方面发展,实际调用WINDOWS SDK的机会也不多。 WIN32汇编编写窗口程序需要调用大量的WINDOWS 的API,而且提供了高级语言才有的条件语句和循环语句,难度相对于...

The research on computer technolog 770

C++绘制程序窗口

文章目录前言一、设计窗口类二、注册窗口类三、创建窗口四、显示窗口五、更新窗口六、消息循环七、完整代码 前言 绘制窗口的步骤可以大致分为,设计窗口类,注册窗口类,创建窗口,显示窗口,更新窗口,消息循环。 一、设计窗口类 这里要用到WNDCLASS窗口类,先定义一个WNDCLASS类的变量。通过对于这个变量的初始化,我们可以设置窗口的背景颜色,鼠标光标类型,图标,应用程序实例句柄,窗口处理函数等等。 TCHAR szAppClassName[] = TEXT("ZWX"); WNDCLASS wc = {

qq_42430908的博客 1万+

Win32汇编——第一个窗口程序

1.窗口程序的运行模式:消息驱动 2.窗口程序实现大部分功能的代码应该呆在同一个模块中——“消息处理”模块,这个模块可以随时应付所有类型的消息,只有这样才能随时响应用户的各种操作。 3.窗口程序的运行过程: 4.窗口的回调函数,也叫窗口过程(由Windows自身

kisbuddy 2144

Windows 窗口程序结构详解

文章目录引言一、一些基础知识的介绍二、Windows程序的结构三、第一个窗口程序的流程四、代码实现五、运行平台 引言 众所周知,我们只要使用Windows的操作系统,必然离不开Windows的界面程序,无论是用什么语言(c 、c++、汇编、或是易语言),什么编译器,只要是带图形界面的PE文件,运行时必然带有Windows子系统,也就是说,遵循Windows界面程序的结构。 那么,我们如果掌握了这...

peng1874的博客 2063

Win32基础编程 第一个窗口程序(一)

1.Windows编程基础注意: 1) 不要背函数,猜函数是一项技能,理解+猜。Windows源代码不公开,根据自己掌握的知识推理。 2) 常识性的东西要掌握。 2.简历一个窗口程序: 添加新工程,选Win32Application,指定工程名WinCreate; 选择Atypical "Hello World!" application; 看一下WinCreate.cpp,WinMa

1092

[32位汇编系列]003 汇编中__stdcall 调用约定以及参数传递

看了上一篇文章[32位汇编系列]002 - 创建标准的windows窗口(3) 之后, 你是否对反汇编代码中有很多ebp+xxx 或者ebp-xxx之类的指令感觉很疑惑, 今天, 我还以 上一篇文章的例子 中的窗口过程_WinProc的反汇编代码作为例子, 来详细的说明一下在32位汇编中, 参数以及局部变量是如何被程序使用的。 首先你必须明白一个事实是, Windows的绝

Thinker's Blog 1264

VC菜菜鸟:建立第一个基于Visual C++的Windows窗口程序

建立第一个基于VisualC++的Windows窗口程序: 发表于:        a)执行命令:新建 –> 项目 –> 其它语言 –> Visual C++ –> Windows窗体应用程序 –> … –> Finish ;               效果如下图所示:        b)添加控件:               从工具栏向Form窗体

程序猿的实验室 1万+

跟我一起玩Win32开发(8):绘图(A)

从本篇开始,我就不吹牛皮,那就吹吹兔皮吧。说说与绘图有关的东东。 要进行绘制,首先要得到一个DC,啥是DC呢?按字面翻译叫设备上下文,也可以翻译为设备描述表,它主要指API为我们封装了一些与显示设备相关的交互操作,我们这里说的是图形的绘制,自然指的是显卡。当然,对于同一客观事物,世界上并不存在唯一的理解方案,技术上的东西最终拿来用的,不应该有硬性的去统一。我们之中的很多人,最大的失败在于,人家说

老周——“易之道” 1万+

Cocos Creator 3D音频定位实战:从原理到沉浸感实现

3D音频定位是游戏开发中实现沉浸感的关键技术,其核心原理基于HRTF(头部相关传输函数)模型,模拟声音在空间中的传播与双耳感知差异。这项技术通过赋予声音空间坐标、距离衰减和方向属性,将音频从背景元素提升为可交互的环境线索,极大增强了虚拟世界的真实感与玩家的空间认知。在工程实践中,开发者需要深入理解声源、听者、衰减曲线与多普勒效应等基础概念,并合理运用音频池、优先级管理与动态混音等技术手段来平衡效果与性能。对于Cocos Creator开发者而言,无论是使用引擎原生的AudioSource组件构建轻量级方案,

weixin_30972263的博客 295

(一)利用Python实现数据集读取,Python基本文件操作介绍

机器学习是计算机对大量数据的分析过程,在机器学习的实际项目中,通常都需要准备数据集,数据集通常包含的数据数量是庞大的。例如,在处理计算机视觉领域的项目时,每一张图片都是一个单独的文件,为了提高模型训练的效果,图片数量通常会比较多,因此需要合理且高效的操作将所有的图片数据读取。本篇旨在介绍如何用Python对海量文件进行遍历,也是机器学习实践的第一步。.........

ZZR2631574030的博客 6357

Windows 程序设计:创建第一个窗口

超详细的Windows窗口创建教程!只要你有C语言基础就能轻松学会!文章末尾附带完整的Windows窗口创建代码!

先写一个BUG吧 1万+

【win11+vs 2017+OpenCV4.5.5+Qt5.12配置】详细安装过程+小问题解决

由于Qt5无法与最新的vs2022兼容,扩展工具中一直显示不可用,所以将vs降级成vs2017。在安装Qt的过程中,会选择安装Qt套件,其中就的MCVS 2017,说明vs2017是与qt兼容的。当然也可以用qt creator这一原生IDE。OpenCV版本目前是最新的4.8.0,使用过程中没有什么问题,但是还是安装低版本大概率避免一些玄学问题。

qq_45306739的博客 3351

Eclipse中创建第一个窗口程序

介绍在Eclipse中安装WIndowBuilder插件的几种方式,并用WIndowBuilder创建了第一个窗口程序。

gc_2299的博客 1万+

MultiOTP Credential Provider避坑指南:从安装到RDP双因素认证的全流程解析

本文详细解析了MultiOTP Credential Provider从安装到实现RDP双因素认证(MFA)的全流程,重点分享了Docker部署、Active Directory集成及网络级认证(NLA)兼容性等环节的实战避坑经验,旨在帮助运维人员高效、稳定地部署离线双因素认证方案,提升Windows远程桌面安全性。

weixin_29255731的博客 646

分布式光纤传感(DFOS)DTS/DAS/DSS 三合一:10公里管线监测实战与数据解读

本文详细介绍了分布式光纤传感(DFOS)技术在10公里管线监测中的实战应用,通过DTS(温度)、DAS(振动)、DSS(应变)三合一系统,实现对管线健康状态的立体感知。文章涵盖工程部署、数据采集、多物理量数据融合及噪声抑制等关键技术,展示了如何通过一根光纤完成复杂监测任务,显著提升管线安全性和维护效率。

weixin_29168153的博客 315

第一个C++窗口程序(Windows应用程序)

第一个C++窗口程序 //第一个C++窗口程序 //2020.10.15 #include<Windows.h> #include<tchar.h> static TCHAR szWindowClass[] = _T("WindowClass"); static TCHAR szTitle[] = _T("窗口程序"); //第五步:窗口函数中处理窗口消息 LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,WPARAM wParam,

学Java的LC的博客 2103

Delphi 13 Beta初体验:手把手教你安装RAD Studio Ganymede,并实测新条件运算符

本文详细介绍了Delphi 13 Beta(代号Ganymede)的安装步骤和新特性,重点解析了新增的条件运算符语法。通过实测对比,展示了64位IDE的性能提升和新语法在代码简洁性上的优势,为开发者提供了从安装到实战的完整指南。

weixin_30399821的博客 205

Windows编程基础,第一个Windows程序,注册窗口,创建窗口

Win32编程,指的是用Window提供的API(Application Programming Interface)为Window编写应用程序。Windows编程,大家也通常称为win32编程,或win32 SDK编程,其含义是针对32位Windows操作系统。 在这一章节中,我们会带大家认识Windows应用程序,编写第一个Windows程序,带大家学习注册窗口和创建窗口。

WdIg-2023的博客 1727

Matlab 曲面平滑与点云处理

曲面平滑是一种常见的数学和计算机图形学技术,可以用来消除噪声、填补数据间隙,以及改善曲面的外观。在点云处理中,曲面平滑也被广泛应用于重建、拟合和可视化等领域。本文将介绍如何使用 Matlab 进行曲面平滑和点云处理,并提供相应的源代码。通过以上步骤,我们可以使用 Matlab 进行曲面平滑和点云处理。你可以根据具体需求调整参数和算法,以获得理想的曲面平滑效果。接下来,我们可以使用平滑算法对三角化的网格进行曲面平滑。以上代码将绘制原始点云和重建后的点云,并在图形中显示坐标轴和图例。表示平滑的迭代次数。

QfcaLinux的博客 753

MATLAB库函数unwrap(相位解卷绕)的C语言实现

什么是相位解卷绕 Q = unwrap(P) Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians. If P is a matrix, unw

业精于勤,荒于嬉 4248

QT 创建第一个Qt窗口

mainwindow.cpp中的这段代码解释如下: 在Qt编程框架下, MainWindow的构造函数 是用于创建和初始化MainWindow类的一个实例。局部变量声明 new Ui 这行代码初始化了一个Ui MainWindow类型的对象 通常是由Qt Designer自动生成的用于管理UI组件的对象。它通过传递当前对象 即this指针指向的对象 来调用Ui MainWindow类中的setupUi方法, 通常这个方法会根据之前 在Qt Designer中设计的UI布局来设置窗口的外观。

QT WIDGETS,QT QML,QT WEB、OpenCV 1808

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

第一个Win32窗口程序

1.基本概念 在C语言中,printf、scanf、strlen等是C语言库函数,而在Windows平台下,也有由Windows操作系统提供的各种各样的函数,方便开发Windows应用程序,这些函数就是由Windows提供给应用程序编程的接口,简称API函数,用MSDN手册进行查找使用API函数 SDK是软件开发包,包含API函数库、帮助文档、使用手册、辅助工具等资源,实际就是一个资源的集合 窗口通常包含:标题栏、菜单栏、系统菜单、最小化框、最大化框等。分为客户区和非客户区 句柄是各种资源的标识号。Win

procurar的博客 372

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

[Windows开发] 用C++创建第一个窗口程序

Win32 API(也称为Windows API)是Windows比较原生态的C++ API。 #ifndef UNICODE #define UNICODE #endif #include <windows.h> LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR

藏知阁 4916

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Windows第一章 第一个窗口程序

初学的时候使用最多的是C语言库函数。在Windows平台下,也有类似的函数可以调用,这些函数是由windows操作系统提供,各种各样的函数,方便我们开发windows应用程序,这些函数就是由windows提供给应用程序编程的接口,简称API函数。主要的windows函数在Windows.h头文件进行声明。windows操作系统提供10000多个API函数,开发者要全部记住是不可能的,但是也很容易记,单词的组合,使用vs2022的Help Viewer可以实现查询。

yerennuo的博客 948

《WINDOWS 环境下32位汇编语言程序设计》第4章 第一个窗口程序

本章主要介绍窗口程序,了解窗口是什么,分析窗口程序的框架,窗口程序的组成,窗口过程 ,窗口间的通信。

chenyijun的专栏 1034
上一篇: 第一篇 开发环境的搭建
下一篇: 第八篇 TSR程序设计初探
lulipeng_cpp
博客等级 码龄15年 169粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值