第一个 Win32 窗口程序

第一个 Win32 窗口程序

程序骨架 int WinMain(){ // 设计窗口外观及交互响应,注册,申请专利RegisterClass(...) ;// 生产窗口 CreateWindow(...); // 展示窗口 ShowWindow(...); // 粉刷窗口 UpdateWindow(...);// 进入消息循环 while (GetMessage(...));{ // 消息转换 TranslateMessage(...); // 消息分发 DispatchMessage(...); }

可以直接运行

#include <stdio.h>
#include <windows.h>//设计一个窗口类,填入参数
//注册窗口类
//创建窗口
//显示以及更新窗口
//循环等待消息
LPCTSTR clsName = "My";
LPCTSTR msgName = "欢迎学习";//回调函数
LRESULT CALLBACK MyWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR lpCmdLine, INT nCmdShow)
{
// 	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;//定义一个窗口对象WNDCLASS wndcls{};wndcls.cbClsExtra = NULL;wndcls.cbWndExtra = NULL;wndcls.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);wndcls.hCursor = LoadCursor(NULL, IDC_ARROW);wndcls.hIcon = LoadIcon(NULL, IDI_APPLICATION);wndcls.hInstance = hInstance;//定义交互响应wndcls.lpfnWndProc = MyWinProc;//定义窗口代号wndcls.lpszClassName = clsName;wndcls.lpszMenuName = NULL;wndcls.style = CS_HREDRAW | CS_VREDRAW;//注册窗口类RegisterClass(&wndcls);//创建窗口HWND hwnd;hwnd = CreateWindow(clsName, msgName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);//显示和刷新窗口ShowWindow(hwnd, SW_SHOWNORMAL);UpdateWindow(hwnd);//消息循环MSG msg;while (GetMessage(&msg,NULL,NULL,NULL)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}
LRESULT __stdcall MyWinProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{//uMsg消息类型int ret;HDC hdc;switch (uMsg){case WM_CHAR:char szChar[20];sprintf_s(szChar, "您刚才按下了:%c", wParam);MessageBox(hwnd, szChar, "char", NULL);break;case WM_LBUTTONDOWN:MessageBox(hwnd,"检测鼠标左键按下","msg",NULL);break;case WM_PAINT:PAINTSTRUCT ps;hdc = BeginPaint(hwnd, &ps);TextOut(hdc, 0, 0, "www.baidu.com", strlen("www.baidu.com"));EndPaint(hwnd, &ps);MessageBox(hwnd, "重新绘制", "msg", NULL);break;case WM_CLOSE:ret = MessageBox(hwnd, "是否真要退出!", "msg", MB_YESNO);if(ret == IDYES){DestroyWindow(hwnd);}break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在C#中利用DirectX实现声音播放

在c#中利用directx实现声音播放我感觉声音的播放比较简单。我们从播放声音开始。为什么我这么觉得&#xff1f;我也不知道。 这里是展示最简单的directx播放声音的例子,我尽量省略了无关的代码。最后的代码只有19行,够简单了吧&#xff1f; 准备工作&#xff1a; 1.安装了dire…

windows网络编程

windows网络编程 TCP编程 服务端 这里我们有几点需要注意: 使用WSAStartup初始化网络库,即将与socket函数相关dll文件加载到进程地址空间中退出时,使用WSACleanup()卸载相关dll文件与Linux使用close函数关闭socket不同,windows需要使用closesocket函数关闭socket WSAStart…

TCP服务器epoll的多种实现

TCP服务器epoll的多种实现 对于网络IO会涉及到两个系统对象 用户空间中进程或者线程操作系统内核 比如发生read操作时就会经历两个阶段 等待数据就绪将数据从内核缓冲区拷贝到用户缓冲区 由于各个阶段多有不同的情况,一组合么就产生了多种网络 IO 模型 阻塞IO 在Linux中…

软件的社交能力

两个人之间互不相识&#xff0c;则无法交往&#xff0c;两个系统之间相互不能识别&#xff0c;那么也就不可能相互通讯。但是人有一种社交能力&#xff0c;这种能力可以保证两个不相识的人&#xff0c;相互认识&#xff0c;开始交往。两个系统之间没有这种能力&#xff0c;所以…

设计模式实践

以前写程序不是太注意&#xff0c;将程序中的执行接口、容器接口和加载工具混合在一起设计。例如一个服务工厂&#xff0c;对于调用方来说&#xff0c;他是不关心你的容器机制&#xff0c;他关心的是执行接口&#xff0c;即他的结果。而对于服务的加载程序&#xff0c;他关心如…

侯捷面向对象高级编程(二)

侯捷面向对象高级编程(二) 转换函数 转换函数没有返回值,返回值就是double即函数名,不需要自己写因为转换函数一般不会改变其中内容,所以要加const限定 两条路都可以走,就回产生歧义,报错 explict禁止自动转换,于是4无法转转换为Fraction pointer-like cliasses ->作用之后…

拒绝了对对象 'sp_sdidebug'(数据库 'master',所有者 'dbo')的 EXECUTE 权限

在.net中调用时出现“拒绝了对对象 sp_sdidebug&#xff08;数据库 master&#xff0c;所有者 dbo&#xff09;的 EXECUTE 权限”的错误的解决办法。该问题是我在用指定的URL启动项目后&#xff0c;再“附加进程”后运行程序时出现的。该问题主要是.net2005的调试机制引起的&am…

ASP.NET MVC 音乐商店 - 6. 使用 DataAnnotations 进行模型验证

在前面的创建专辑与编辑专辑的表单中存在一个问题&#xff1a;我们没有进行任何验证。字段的内容可以不输入&#xff0c;或者在价格的字段中输入一些字符&#xff0c;在执行程序的时候&#xff0c;这些错误会导致数据库保存过程中出现错误&#xff0c;我们将会看到来自数据库的…

人生的12个经典领悟

1、父子二人经过五星级饭店门口&#xff0c;看到一辆十分豪华的进口轿车。儿子不屑地对他的父亲说&#xff1a;「坐这种车的人&#xff0c;肚子里一定没有学问&#xff01;」 父亲则轻描淡写地回答&#xff1a;「说这种话的人&#xff0c;口袋里一定没有钱&#xff01;」 2…

poll聊天室程序

poll聊天室程序 客户端: #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <assert.h> #include <stdio.h> #include <unistd.h> #include <errno.h> #include &l…

EF Code First学习笔记:数据库创建(转)

控制数据库的位置 默认情况下&#xff0c;数据库是创建在localhost\SQLEXPRESS服务器上&#xff0c;并且默认的数据库名为命名空间context类名&#xff0c;例如我们前面的BreakAway.BreakAwayContext。 有几种方法可以改变这种默认约定。 利用配置文件 在配置文件中新加一个连接…

ASP.NET 2.0+Atlas编写鼠标拖放程序

作者&#xff1a;朱先忠编译摘要 本文将详细探讨Atlas中的声明性编程与强制性编程之间的关系&#xff0c;及如何用之在一个web客户端实现拖放功能。下图为本文相应示例程序运行结果快照。运行结果一. 简介  本文旨在帮助读者理 解微软的Atlas技术的某些方面的工作原理。Atlas…

疑难杂症--由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

在巡检数据库时发现&#xff0c;数据库备份作业失败&#xff0c;查看错误日志发现以下提示&#xff1a; 已以用户 WIN2008-JH122\SYSTEM 的身份执行。 Microsoft (R) SQL Server 执行包实用工具 Version 10.0.4000.0 for 64-bit 版权所有 (C) Microsoft Corp 1984-2005。保留…

call_once/once_flag的使用

call_once/once_flag的使用 保证在多线程环境中某个函数仅仅被调用一次,可以使用std::call_once函数,并且需要一个入参once_flag类型的入参 #include<iostream> #include <string> #include <tuple> #include <mutex> #include <thread> #incl…