浅谈API学习经验

所属分类: 软件教程 / 编程开发 阅读数: 1601
收藏 0 赞 0 分享
  API学习经验之谈___1

  问题1____句柄

  相信这个"东西"足以让各位朋友郁闷很长一段实际在"云里雾里"中(小生可能更严重)

  其实,这是一个最不足以让你去深究的东西,先听听"大师级人物"(个人认为)罗云彬老师在<<Windows 环境下32位汇编语言程序设计>>(好书啊!~_~)一书中对它的定义:

  句柄只是一个数值而已,它的值对程序来说是没什么有意义的,它只是Windows用来表示资源的编号而已,所以只有Windows才知道怎么使用它来引用各种资源!

  明白了吗?(鬼才明白~_~!)

  好,举例来说,屏幕上已经有10个窗口,Windows把他们从1道10编号,应用程序又建立了一个窗口,现在Windows把它编号位11,然后把11当做窗口句柄返回个应用程序,应用程序并不知道11代表的是什么,但在操作窗口的时候,把11当作句柄传给Windows,Windows自然可以根据这个数值查出是哪个窗口.当该窗口关闭的时候,11这个编号就作废了.第二次运行的时候,如果屏幕上又有5个窗口,那么现在句柄可能就是6了,所以,应用程序不用关心句柄的具体数值是多少.打个比方,可以把句柄当做是商场中寄放包包时营业员MM给的纸条,纸条上的标号代表什么,用户不用去了解,但把它给营业员MM时,她自然会给你正确的包包啦!

  明白了吗?(要是还不明白就改行算了!你小子的天赋不在学计算机上~_~!)

  问题2____新建项目(以VC.NET/6.0为例)

  要想编译一段API代码,可以考虑走明星路线(我就是我生活中的明星,呵呵,说笑)

  VC.NET

  在新建项目中选择"Win32项目"为模板,前提是你选择Visual C++为项目类型

  填了名字下一步后,停下,选择应用程序设置,给附加选项的空项目打上钩

  好了,你就可以随心所欲了,每次看到这个界面,我就忍不住欲火焚身啊!(不要误解,是写程序的欲火)

  我先在源文件里添加了一个Cpp文件,叫做first.cpp,为了让你们爽下,带码也考给你们算了,要是觉得太简单,不要K我啊!(我躲):

  #include <windows.h>

  #include <string.h>

  #include <stdlib.h>

  #include <stdio.h>

  #include <assert.h>

  LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

  HDC hdc;

  HDC hdcmem;

  HBITMAP hBm;

  BITMAP bm;

  int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow)

  {

  HWND hwnd;

  MSG msg;

  WNDCLASS wndclass;

  char lpszClassName[]=" ";

  char lpszTitle[]="Example";

  wndclass.cbClsExtra=0;

  wndclass.cbWndExtra=0;

  wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

  wndclass.hCursor=LoadCursor(NULL,IDI_APPLICATION);

  wndclass.hIcon=LoadIcon(NULL,IDC_ARROW);

  wndclass.hInstance=hInstance;

  wndclass.lpfnWndProc=WndProc;

  wndclass.lpszClassName=lpszClassName;

  wndclass.lpszMenuName=0;

  wndclass.style=0;

  if(!RegisterClass(&wndclass))

  {

  MessageBeep(0);

  return FALSE;

  }

  hwnd=CreateWindow(lpszClassName,

  lpszTitle,

  WS_OVERLAPPEDWINDOW,

  CW_USEDEFAULT,

  CW_ USEDEFAULT,

  CW_USEDEFAULT,

  CW_USEDEFAULT,

  NULL,NULL,

  hInstance,NULL);

  hBm=LoadBitmap(hInstance,"tomato");

  GetObject(hBm,sizeof(BITMAP),(LPVOID)&bm);

  ShowWindow(hwnd,nCmdShow);

  UpdateWindow(hwnd);

  while(GetMessage(&msg,NULL,0,0))

  {

  TranslateMessage(&msg);

  DispatchMessage(&msg);

  }

  return msg.wParam;

  }

  LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)

  {

  PAINTSTRUCT ps;

  switch(message)

  {

  case WM_CREATE:

  hdc=GetDC(hwnd);

  hdcmem=CreateCompatibleDC(hdc);

  ReleaseDC(hwnd,hdc);

  case WM_PAINT:

  //back=LoadBitmap(hInstance,

  hdc=BeginPaint(hwnd,&ps);

  SelectObject(hdcmem,hBm);

  BitBlt(hdc,180,80,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);

  EndPaint(hwnd,&ps);

  break;

  case WM_DESTROY:

  DeleteObject(hBm);

  PostQuitMessage(0);

  break;

  default:

  return DefWindowProc(hwnd,message,wParam,lParam);

  }

  return 0;

  }

  然后我在资源文件里添加一个.rc的文件(在添加新项里有),取名叫pic7.rc,接着双击pic7.rc就可以看到资源视图,里面有个文件夹就叫pic7.rc,右击,选择添加资源,选择Bitmap,再导入一张.bmp图片(system32这个文件夹下这种图片很多的),右击导入的图片,可以看到选项属性,你把它的ID改为"tomato"(我随便找了张tomato的图片,你也可以把它定义为apple啊,或者banana啊什么的都行,只是你要在程序中改下它的名字就行了)好了,perfect!你运行下看看,有了吧!

  现在介绍API的书有,介绍VC.NET的书也有,就是没有如何实际写程序时改怎么用的书!连基本的操作都不交,程序就没法编译了,程序都没法去验证,怎么叫人家继续学下去呢?中国人注重理论知识一定要过硬,不过就我个人认为还是老外的注重实际操作的学习方式更值得我们去提倡啊!

  问题3____数据类型

  很多人搞不懂API里面"乱七八糟"的数据类型,哎呀,其实是你看的或写的太少的缘故罢了!

  这个我不说了,虽然确实是个问题,不过有点脑子的人都知道,上网可以找嘛,真的很多的,要是真的找不到,没办法,问我好了(我的个人隐私QQ:275913977)

  暂时想不到什么问题了,反正你只要知道程序的入口是int WINAPI WndMain(HINSTANCE,HINSTANCE,LPSTR,int){}

  当事件发生了,就要用到switch(message){case}结构了,因为发生了不同的事件要用不同的方式去处理,这个过程是在函数LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM)里执行的,主要是(WndProc)!


更多精彩内容其他人还在看

PowerDesigner16.6怎么破解?SAP PowerDesigner16.6安装破解详细图文教程

PowerDesigner是一款来自国外的数据库建模工具,最近,很多网友问小编PowerDesigner16.6怎么破解?今天脚本之家小编就给大家带来SAP PowerDesigner16.6安装破解详细图文教程,希望对大家有所帮助
收藏 0 赞 0 分享

WebStorm 2017.3最新汉化激活破解及安装教程(附汉化包+原版下载)

WebStorm 2017中文破解版是一款JavaScript开发工具,是最强大的HTML5编辑器以及最智能的JavaSscript IDE,下面就整理WebStorm 2017.3最新汉化破解教程,并附有汉化包及官方原版程序下载地址
收藏 0 赞 0 分享

PhpStorm 10.0.2怎么激活?PhpStorm 10.0.2激活破解图文教程(附注册码)

PhpStorm 10.0.2怎么激活?对于新手来说最头痛的问题还是激活和使破解的问题,今天脚本之家小编就给大家带来PhpStorm 10.0.2激活破解图文教程(附注册码),希望对大家有所帮助
收藏 0 赞 0 分享

Toad for Oracle 2017完整破解版安装教程(附注册码) 64位

Toad for oracle 2017是一款功能强大的数据库管理软件,支持敏捷数据库开发工作,是一个功能强大、结构紧凑的专业化PL/SQL开发环境,本文提供最新版的Toad for Oracle 2017详细的安装步骤,以及软件下载地址和注册码
收藏 0 赞 0 分享

Aqua Data Studio 18汉化安装破解教程(附DateStopper破解下载)

Aqua Data Studio18中文版是一套完整IDE的数据库开发工具,新版对其通用数据库管理和分析软件的一次重大升级,下面就带来了Aqua Data Studio18最新版详细安装步骤,以及破解方法,仅供参考
收藏 0 赞 0 分享

informatica powercenter 9.x安装与配置图文详细教程(适应于Windows系统)

informatica powercenter是一款使用相当广泛的数据集成平台(ETL工具),本文主要针对目前还不会安装与配置informatica powercenter 9.x程序的朋友们,来图文详细介绍informatica powercenter 9.x安装与配置教程,并
收藏 0 赞 0 分享

Myeclipse 2017 CI8汉化破解教程(附注册激活码)

MyEclipse可用于用户所有的UML, AJAX, Web, Web Services, J2EE, JSP, XML, Struts, JSF, Java Persistence, EJB,扩展数据库支持以及应用程序服务器集成需求,那么Myeclipse 2017 CI8怎
收藏 0 赞 0 分享

CoolFormat 源代码格式化工具使用帮助手册

CoolFormat源代码格式化是一款C\C++\C#\CSS\HTML\Java\JavaScript\JSON\Objective-C\PHP\SQL\XML代码格式化工具。软件可以快速多种风格格式化,并对语言进行着色。界面采用Office 2010风格,并有多种样式可以替换
收藏 0 赞 0 分享

Sublime Text 3怎么设配置浏览默认路径为localhost?

Sublime Text 3怎么设置浏览器打开就是localhost路径?Sublime Text 3编辑程序的时候,需要对代码进行预览,该怎么制定配置浏览器默认的浏览路径为localhost呢?下面我们就来看看详细的教程,需要的朋友可以参考下
收藏 0 赞 0 分享

Visual Studio窗口界面显示黑色很多功能消失了怎么办?

Visual Studio窗口界面显示黑色很多功能消失了怎么办?Visual Studio打开以后,窗口变成黑色的了,新建文件的时候,发现工具栏中少了很多功能,该怎么办呢?下面我们就来看看详细的解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多