Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >VC++6.0入门——第一讲,认识VC++6.0,新建工程等

VC++6.0入门——第一讲,认识VC++6.0,新建工程等

原创
作者头像
Arya
发布于 2024-11-12 13:01:28
发布于 2024-11-12 13:01:28
2510
举报
文章被收录于专栏:后端开发专栏后端开发专栏

正文开始前推荐去阅读的文章,感兴趣的去阅读哦!

今日推荐:为什么网站安装SSL证书后HTTPS还是不能访问

推荐链接:https://cloud.tencent.com/developer/article/2465228

推荐原因:本文详细说明了自己安装了SSL证书后还是报错,下面我来说一下我的解决办法。

引出


VC++6.0入门——第一讲,认识VC++6.0,新建工程等

第一讲笔记

接触过Windows编程方法的读者都知道,在应用程序中有一个重要的函数WinMain,这个函数是应用程序的基础。当Windows操作系统启动一个程序时,它调用的就是该程序的WinMain函数(实际是由插入到可执行文件中的启动代码调用的)。WinMain是Windows程序的入口点函数,与DOS程序的入口点函数main的作用相同,当WinMain函数结束或返回时,Windows应用程序结束。

比如加入一个程序变量

设置一个断点,鼠标右键,加入断点

采用调试运行F5快捷键,或者点击图示图标

程序运行的时候,接收到了命令行参数

点击图示按钮,可以停止程序调试

关于程序运行时的图标,可以参考下面进行设置

去掉最小化窗口的按钮

代码语言:java
AI代码解释
复制
WS_OVERLAPPEDWINDOW & ~WS_MINIMIZEBOX

窗口创建时的位置,缺省值表示自己找一个位置

键盘按下的消息

鼠标左键按下

15~21行代码:当用户在窗口中按下鼠标左键时,将产生WM LBUTTONDOWN消息。为了证实这一点,我们在WM LBUTTONDOWN消息的响应代码中,调用MessageBox函数弹出一个提示信息,告诉用户“点击了鼠标”。接下来,我们在窗口中(0,50)的位置处输出一行文字。要在窗口中输出文字或者显示图形,需要用到设备描述表(Device Context),简称DC。DC是一个包含设备(物理输出设备,如显示器,以及设备驱动程序)信息的结构体,在Windows平台下,所有的图形操作都是利用DC来完成的。

报错

LINK : fatal error LNK1168: cannot open Debug/WinMain.exe for writing

表示当前在运行一个没法继续运行

源码

代码语言:c++
AI代码解释
复制
#include <windows.h>
#include <stdio.h>

LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter
  LPARAM lParam   // second message parameter
);

int WINAPI WinMain(
  HINSTANCE hInstance,      // handle to current instance
  HINSTANCE hPrevInstance,  // handle to previous instance
  LPSTR lpCmdLine,          // command line
  int nCmdShow              // show state
)
{
	// 1.设置了一个窗口,定义窗口的一些信息
	WNDCLASS wndcls; // 窗口实例
	wndcls.cbClsExtra=0; // 窗口附加内存空间,通常设置为0
	wndcls.cbWndExtra=0; // 通常用不上,设置为0即可
	// 进行强制类型转换
	wndcls.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // 窗口的背景颜色
	wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); // 光标句柄,这里光标就是十字 cross
	wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); // 图标句柄,这里就是一个error
	wndcls.hInstance=hInstance; // 代表当前应用程序的实例号
	wndcls.lpfnWndProc=WinSunProc; // 回调函数
	wndcls.lpszClassName="sunxin2006"; // 类的名字
	wndcls.lpszMenuName=NULL; // 没有菜单
	wndcls.style=CS_HREDRAW | CS_VREDRAW; // 水平和垂直坐标变化,窗口重画
	RegisterClass(&wndcls); // 注册窗口类,把窗口类的指针给他

	HWND hwnd; // 窗口的句柄
	// 注册的类名,WS_OVERLAPPEDWINDOW同时有了最大化,最小化按钮等
	hwnd=CreateWindow("sunxin2006","跟着大佬学习VC++",
		WS_OVERLAPPEDWINDOW & ~WS_MINIMIZEBOX /*& ~WS_MINIMIZEBOX */,
		0,0,600,400,NULL,NULL,hInstance,NULL);

	// 显示窗口,正常显示normal
	ShowWindow(hwnd,SW_SHOWNORMAL);
	UpdateWindow(hwnd);

	// 消息队列
	MSG msg;
	while(GetMessage(&msg,NULL,0,0)) // 0表示所有信息都感兴趣
	{
		// 按键的按下和抬起,转化成WM_CHAR,放到消息队列中
		TranslateMessage(&msg);
		// 将消息路由给操作系统,操作系统给wndcls.lpfnWndProc=WinSunProc; // 回调函数进行处理
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

// 回调函数
LRESULT CALLBACK WinSunProc(
  HWND hwnd,      // handle to window
  UINT uMsg,      // message identifier
  WPARAM wParam,  // first message parameter 都是整数
  LPARAM lParam   // second message parameter
)
{
	switch(uMsg)
	{
	case WM_CHAR: // 用户按下了按键
		char szChar[20];
		// sprintf,格式化文本放到字符数组中
		sprintf(szChar,"char code is %d",wParam);
		MessageBox(hwnd,szChar,"char",MB_YESNO);
		break;
	case WM_LBUTTONDOWN:
		MessageBox(hwnd,"mouse clicked","message",0);
		HDC hdc;
		// 在哪里画图
		hdc=GetDC(hwnd);
		// 参数:在哪里,位置,输入文字,文字长度
		TextOut(hdc,0,50,"程序员之家",strlen("程序员之家"));
		// 释放DC,
		ReleaseDC(hwnd,hdc);
		break;
	// 窗口大小发生变化
	case WM_PAINT:
		HDC hDC;
		PAINTSTRUCT ps;
		// BeginPaint 和 EndPaint 是一对,只能用在WM_PAINT中
		hDC=BeginPaint(hwnd,&ps);
		TextOut(hDC,0,0,"http://www.sunxin.org",strlen("http://www.sunxin.org"));
		EndPaint(hwnd,&ps);
		break;
	// 窗口关闭的时候的消息
	case WM_CLOSE:
		if(IDYES==MessageBox(hwnd,"是否真的结束?","message",MB_YESNO))
		{
			DestroyWindow(hwnd);
		}
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	default:
		// 对其不感兴趣的进行缺省处理
		return DefWindowProc(hwnd,uMsg,wParam,lParam);
	}
	return 0;
}

新建一个工程

1.启动Microsoft Visual C++6.0,单击【File】菜单,选择【New】菜单项,在“Projects”选项卡下,选择“Win32 Application”,在右侧的“Project name:”文本框中,输入我们的工程名WinMain(如图1.4所示),单击【OK】按钮。

2.在Win32 Application-Step1of1中,选择“An empty project”(如图1.5所示),单击【Finish】按钮。

3出现一个工程信息窗口,单击【OK】按钮,这样就生成了一个空的应用程序外壳。

4.这样的应用程序外壳并不能做什么,甚至不能运行,我们还要为它加上源文件。单击【File】菜单,选择【New】,在“Files”选项卡下,选择“C++Source File”,在右侧的“File”文本框中,输入源文件的文件名WinMain(如图1.6所示),单击【OK】按钮.


总结

VC++6.0入门——第一讲,认识VC++6.0,新建工程等

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MFC学习之窗口基础
                          WinMain函数  1、句柄(HANDLE):{ 1. 定义:资源的标识 2. 句柄的作用: 操作系统通过句柄来找到对应的资源,从而对这些资源进行管理和操作。 3句柄的分类:(按资源){ 1.图标句柄(HICON) , 2.光标句柄(HCURSOR) ,             3. 窗口句柄(HWND) ,            4.应用程序实列句柄(HINSTANCE). } } 2、Windows应用程序,操作系统,计算机硬件之间的相互关系
Gxjun
2018/03/22
7430
MFC学习之窗口基础
【C/C++】回调函数详解&注册窗口类&LRESULT & CALLBACK详解以及游戏中的应用
WNDCLASSEX 成员比较多,这里简单的做一下介绍,具体信息可以查看相关 MSDN 文档。
20岁爱吃必胜客
2022/11/13
1.8K0
【C/C++】回调函数详解&注册窗口类&LRESULT & CALLBACK详解以及游戏中的应用
VBA使用API_03:创建窗体
使用Excel VBA要创建窗体非常的简单,直接插入一个用户窗体就可以了,VBA已经封装好了窗体,而且具有很多功能以及控件。
xyj
2020/07/28
2K0
VBA使用API_03:创建窗体
Windows窗口模板
1.界面效果 2.相关代码 #include<Windows.h> LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPAR
花狗Fdog
2020/10/28
5610
Windows窗口模板
使用鼠标
C语言Windows程序设计 -> 第十一天 -> 使用鼠标 鼠标的使用同样是通过获取Windows鼠标消息来获取用户当前的鼠标状态的。 一、鼠标的介绍     鼠标是计算机的输入设备之一, 在图形化的操作系统上, 鼠标的使用使一些复杂的操作变得简单, 随着科技的进步, 鼠标的种类也越来越多, 按接口类型可分为串行鼠标、PS/2鼠标、总线鼠标、USB鼠标(多为光电鼠标)四种。按其工作原理及其内部结构的不同可以分为机械式,光机式和光电式。     这里我们不讨论鼠标的硬件构造, 更多关于鼠标的硬
猿人谷
2018/01/17
2.8K0
使用鼠标
【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
本系列博文几乎没有难啃的“专业术语”,尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一。(由于本人也是由于项目需要,所以才来查阅相关资料,文中出现的错误欢迎指出,共同进步!谢谢!)
1_bit
2020/10/23
1.3K0
【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
windows api学习笔记-使用定时器
#include <windows.h> #include "resource.h" #include <string> LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型 int APIENTRY WinMain( //APIENTRY是__stdcall的宏定义 HINSTANCE hInstance, //本模块的实例句柄
liulun
2022/05/09
5440
汇编语言学习笔记-接收鼠标消息
.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\include\windows.inc include D:\masm32\include\user32.inc include \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\
liulun
2022/05/09
6040
【读书笔记】Windows程序设计5
与从BeginPaint函数返回的设备句柄不同,从GetDC返回的设备句柄中的裁剪区域是整个客户区,而不仅仅
zhang_derek
2022/12/21
2.5K0
opengl NENE 教程第一课代码
// setup.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> // Windows的头文件 #include <gl/glew.h> // 包含最新的gl.h,glu.h库 #include <gl/glut.h> // 包含OpenGL实用库 #pragma comment(lib, "opengl32.lib") #pragma
流川疯
2019/01/18
1.8K0
win32api显示BMP图片的最简单方案
三、补充 装载位图的方法其实很多,也不需要第三防库 1.从资源中装载,很简单: LoadBitmap(hInstance,(LPCTSTR)IDB_BITMAP1);
全栈程序员站长
2022/09/27
9890
WindowsApi学习笔记-创建一个简单的窗口
#include <windows.h> LRESULT CALLBACK MainWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数的函数原型 int APIENTRY WinMain( //APIENTRY是__stdcall的宏定义 HINSTANCE hInstance, //本模块的实例句柄 HINSTANCE hPrevInstance, //Win
liulun
2022/05/09
5530
windows程序设计-第四章 system2.c 新增滚动条功能
新添加的滚动条功能,首先就是要在createWindow的时候,修改参数风格模式 hwnd = CreateWindow (szAppName, TEXT ("Get System Metrics No. 2"), WS_OVERLAPPEDWINDOW | WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, C
用户1154259
2018/01/17
7090
windows程序设计-第四章 system2.c 新增滚动条功能
汇编语言学习笔记-在窗口打印文本
.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\include\windows.inc include D:\masm32\include\user32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\include\kernel32.inc includelib
liulun
2022/05/09
4110
【专业技术】Win32 SDK编程:我们如何输出文本
在使用Win32编程时,我们常常需要输出文本到窗口上,Windows所有的文本字符或者图形输出都是通过图形设备接口(GDI)进行的,Windows的三大组件之一的GDI32.dll封装了所有的文本和图像输出函数。你也许会说直接用printf不就可以了吗?不错,这个确实是可以输出文本,但是这个智能用于console下的文本输出,而不能用于直接在窗口上面。要在窗口上输出文本,以下的函数都可以实现: DrawText、DrawTextExt、ExtTextOut以及TextOut,这些函数基本都有相似的参数,
程序员互动联盟
2018/03/12
2K0
【专业技术】Win32 SDK编程:我们如何输出文本
使用计时器-方法1
Windows将WM_TIMER消息发送到应用程序的窗口过程。相应SetTimer的调用方法: SetTimer(hwnd,1,uiMsecInterval,NULL); 在任何时刻停止WM_TIMER消息,方法如下: KillTimer(hwnd,1); 当窗口收到WM_TIMER消息时,wParam等于计时器的ID,所以可以用如下方式: #define TIMER_SEC 1 #define TIMER_MIN 2 SetTimer(hwnd,TIMER_SEC,1000,NULL); Set
用户1154259
2018/01/17
6550
使用计时器-方法1
汇编语言学习笔记-接收键盘消息
.386 .model flat,stdcall;内存平坦,参数传递约定 option casemap:none;大小写敏感 ;;;;;;引用一些必要的数据 include D:\masm32\include\windows.inc include D:\masm32\include\user32.inc include \masm32\include\gdi32.inc includelib D:\masm32\lib\user32.lib include D:\masm32\
liulun
2022/05/09
4540
用c语言做简单动画_用C语言编写动画
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;
全栈程序员站长
2022/09/22
5.5K0
MFC 随机矩形
问题描述:   简单地使用随即的尺寸和颜色不停的绘制一系列的图像。 一种古老的方式:   设置一个向窗口函数发送WM_TIMER消息的windows计时器。   对每个WM_TIMER消息,调用GetDC函数获取设备环境,然后绘制一个随机矩形,接着调用ReleaseDC函数释放设备环境。 方法弊端:   程序不能很快的绘制随机矩形,必须等待每个WM_TIMER消息,会依赖于系统时钟的精度 新函数: PeekMessage(&msg,NULL,0,0,PM_REMOVE);这个函数允许一个程序检查程序队列中
用户1154259
2018/01/17
1.4K0
使用计时器-方法2
第一种方法 是把WM_TIMER消息发送给正常的窗口过程。 第二种方法 是 自己让 windows把计时器消息发送给程序中的另一个窗口过程 回调函数: VOID CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTimer) { .... } 第一种方式调用的SetTImer函数,第四个参数一般直接为NULL SetTimer(hwnd,iTimerID,iMsecInterval,NULL); 第二种方式调用的Set
用户1154259
2018/01/17
6190
相关推荐
MFC学习之窗口基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档