如何学习VC开发WINDOWS程序讨论(三)

原创 2002年06月11日 15:06:00

B:这2天在家看完了3章,看得还算轻松
有一些函数调用的问题,比如:
int MessageBox(
  HWND hWnd,          // handle of owner window
  LPCTSTR lpText,     // address of text in message box
  LPCTSTR lpCaption,  // address of title of message box
  UINT uType          // style of message box
);
////////////////////////////////
HWND hWnd
int a = MessageBox(hWnd,"Text","Caption",MB_ABORTRETRYIGNORE)
问题:LPCTSTR类型是个(LP不是指针吗)指针,但套用时候怎么没给指针类型呢?也没用取地址的&啊?而且返回的是IDABORT 怎么返回的是int整形呢?明明不是整形啊!!!???

A:在c语言开发程序中,一般函数都返回一个数值,典型的是int和DWORD。
但是一个数对于源代码清晰没有好处,所以用宏定义定义成比较容易阅读的样子。IDABORT,IDCANCEL, IDOK这些都是常用的定义。在WINDOWS.H中你随便就可以看到无数的定义。

 

B:IDOK就是一个定义的宏了吗?

A:是

B:那返回的宏IDOK和int潜在的关系是什么?
int是整形,那IDOK就是个方便理解的整形定义吗?

A:返回的就是一个int值,比如IDOK就是
#define IDOK 1

仅仅为了便于源码级的使用


B:其实是他们已经定义好了的一个玩意,我们就相当于返回了这个"变量"是吧?

A:是"常量"

 

B:哦哦,我知道了,常量

 

A:解答另一个问题:
首先,我们要明白数组的本质.
C语言是一种比较低级的语言,数组不是一个类对象,其实就是指向内存中的一片连续存储区域。
数组的名称,就代表那片存储区域的起始地址。
所以说,如果我们定义了一个字符串数组
char szString[] = "this is a string";
那么,szString实际上就是一个char*的指针。
所以,这样用是合法的:
MessageBox(NULL, szString, ...);
死马 (15:53:01): 好了,再进一步,现在我们省略定义szString的步骤,不就是你看到的样子了吗?MessageBox(NULL, "Hello",...);
其实编译的时候,这里存在一个匿名的字符串变量。

B:啊,我明白了

那"test"是char,也就是数组了

那在c里有string 类型吗?

A:标准c/c++没有,扩展库中有,但既然不是标准,一旦使用就依赖那个库了。

"test"不是char,是个char型的数组。

B:'test'是char[],这次对了吧?哈哈

是不是见到参数是lp打头的就是指针形参?


A:这是一种约定,不是标准,如果是微软文档代码,可以这么认为。

lp就是long pointer,长指针,历史遗留产物,现在win32编程不分长短指针。

B:LPCTSTR是什么啊?

A:LPCTSTR就是LP C T STR
LP:long pointer
C:const
T:TCHAR
STR:string

B:怎么 都跑一起去了?

A:LP表明是指针,C表明在函数中不会修改,T是用作ANSI和UNICODE源码级兼容(这个以后再去研究),STR表明是个字符串。
我们一般程序不编译成UNICODE版,那么最后这个定义展开为 const char*
是不是看看吓人,其实什么都没有?

B:是不是只要见到LPCTSTR就给他个字符就完了吗?

难道我也可以定义LPCTSTR a;是吗?

A:见到LPCTSTR就给字符数组,你当然可以自己定义。
 同理,如果是LPTSTR就是一个可以在函数中修改的字符串指针,目前展开为char*

如何学习VC开发WINDOWS程序讨论(一)

    经常看到有很多朋友问关于vc编程学习的问题,我也回答过一些,今天我和一个朋友讨论了关于学习vc编程的问题,整理一下,对初学这或许有些帮助。A:deadhorse  B:朋友 A:说说你的实际情...
  • deadhorse
  • deadhorse
  • 2002年06月07日 09:25
  • 1178

如何学习VC开发WINDOWS程序讨论(二)

我的朋友经过一晚的学习,继续和我讨论。B:问你几个问题吧!WinMain()函数的调用约定是PASCAL。什么是约定啊?不算很理解,PASCAL不是一种语言吗?和c有什么关系啊?A:在这里PASCAL...
  • deadhorse
  • deadhorse
  • 2002年06月10日 09:37
  • 641

如何用VC6.0编写Windows Service程序

如何用VC6.0编写Windows Service程序 2005/10/11杨登峰(MSN:dengfengyang@hotmail.com)本人在项目开发要用到创建Service应用程序。但是网络好...
  • ydfok
  • ydfok
  • 2005年10月11日 21:46
  • 5003

详解:Windows系统安装OpenSSL 以及在VC环境下编写一个简单OpenSSL程序

一、Windows系统安装OpenSSL 1、  环境: 操作系统:Windows7(32位)64位没有测试,不保证本方法可以成功 VC:VC 6.0(其他VC环境也大同小异,只不过路径有所不同...
  • wowowoc
  • wowowoc
  • 2014年06月09日 23:55
  • 2590

NN远程桌面SDK之VC++开发源码

NN远程控制组件提供简单的二次开发接口,可快速实现远程控制功能。支持各种语言二次开发。如c++,VB,C#,Delphi,以及android手机平台。C++源码功能: 1. 登陆服务器获取我的ID号(...
  • Ensue
  • Ensue
  • 2016年12月02日 15:40
  • 1218

浅谈如何学习VC++

预备知识:     1. VC是一门语言吗?     VC不是一种语言,而是一种集成开发环境(IDE)。利用VC,可以把源程序编写、编译链接、调试运行等各个工作放在一块完成,很方便。如果你学过 808...
  • liquanhai
  • liquanhai
  • 2010年04月18日 18:44
  • 10014

VC++ 2013 开发windows窗体程序

开发工具版本:Visual Studio Express 2013 for Windows Desktop 1. 新建Visual C++下面的“Win32 Project” 2. 项目属性中,在...
  • yinxing2008
  • yinxing2008
  • 2013年12月29日 22:34
  • 1128

windows编程经典书籍+VC++学习路线资料

本人是刚刚开始学习windows编程的,感觉看雪学院的大牛很NB.想找一些书籍来看学习学习,可是不知道看哪些书好. 驱动,对菜鸟们来说真是一个很深奥的话题,所以 ,我找来了这篇文章供大家分享,以后大...
  • fjxichao
  • fjxichao
  • 2014年07月29日 15:35
  • 1917

VC开发Windows客户端软件之旅——前言

本系列博文将介绍Windows客户端开发过程中用到的各个模块和技术点。其中包括:界面、日志、崩溃收集和分析、网络、数据加密和加解压等。...
  • breaksoftware
  • breaksoftware
  • 2014年09月07日 18:32
  • 4042

NVIDIA Jetson TK1学习与开发(三):图文详解Jetson TK1平台搭建

在《NVIDIA Jetson TK1学习与开发(一)》和《NVIDIA Jetson TK1学习与开发(二)》中已经对TK1的资源进行了简单介绍,并且推荐了一些很有用的网址供大家学习。本次将详细介绍...
  • FRD2009041510
  • FRD2009041510
  • 2014年12月20日 15:01
  • 6744
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何学习VC开发WINDOWS程序讨论(三)
举报原因:
原因补充:

(最多只允许输入30个字)