国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 編程設(shè)計(jì) > 正文

淺談API學(xué)習(xí)經(jīng)驗(yàn)

2020-07-14 13:42:39
字體:
供稿:網(wǎng)友
  API學(xué)習(xí)經(jīng)驗(yàn)之談___1

  問題1____句柄

  相信這個(gè)"東西"足以讓各位朋友郁悶很長一段實(shí)際在"云里霧里"中(小生可能更嚴(yán)重)

  其實(shí),這是一個(gè)最不足以讓你去深究的東西,先聽聽"大師級(jí)人物"(個(gè)人認(rèn)為)羅云彬老師在<<Windows 環(huán)境下32位匯編語言程序設(shè)計(jì)>>(好書啊!~_~)一書中對(duì)它的定義:

  句柄只是一個(gè)數(shù)值而已,它的值對(duì)程序來說是沒什么有意義的,它只是Windows用來表示資源的編號(hào)而已,所以只有Windows才知道怎么使用它來引用各種資源!

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

  好,舉例來說,屏幕上已經(jīng)有10個(gè)窗口,Windows把他們從1道10編號(hào),應(yīng)用程序又建立了一個(gè)窗口,現(xiàn)在Windows把它編號(hào)位11,然后把11當(dāng)做窗口句柄返回個(gè)應(yīng)用程序,應(yīng)用程序并不知道11代表的是什么,但在操作窗口的時(shí)候,把11當(dāng)作句柄傳給Windows,Windows自然可以根據(jù)這個(gè)數(shù)值查出是哪個(gè)窗口.當(dāng)該窗口關(guān)閉的時(shí)候,11這個(gè)編號(hào)就作廢了.第二次運(yùn)行的時(shí)候,如果屏幕上又有5個(gè)窗口,那么現(xiàn)在句柄可能就是6了,所以,應(yīng)用程序不用關(guān)心句柄的具體數(shù)值是多少.打個(gè)比方,可以把句柄當(dāng)做是商場中寄放包包時(shí)營業(yè)員MM給的紙條,紙條上的標(biāo)號(hào)代表什么,用戶不用去了解,但把它給營業(yè)員MM時(shí),她自然會(huì)給你正確的包包啦!

  明白了嗎?(要是還不明白就改行算了!你小子的天賦不在學(xué)計(jì)算機(jī)上~_~!)

  問題2____新建項(xiàng)目(以VC.NET/6.0為例)

  要想編譯一段API代碼,可以考慮走明星路線(我就是我生活中的明星,呵呵,說笑)

  VC.NET

  在新建項(xiàng)目中選擇"Win32項(xiàng)目"為模板,前提是你選擇Visual C++為項(xiàng)目類型

  填了名字下一步后,停下,選擇應(yīng)用程序設(shè)置,給附加選項(xiàng)的空項(xiàng)目打上鉤

  好了,你就可以隨心所欲了,每次看到這個(gè)界面,我就忍不住欲火焚身啊!(不要誤解,是寫程序的欲火)

  我先在源文件里添加了一個(gè)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;

  }

  然后我在資源文件里添加一個(gè).rc的文件(在添加新項(xiàng)里有),取名叫pic7.rc,接著雙擊pic7.rc就可以看到資源視圖,里面有個(gè)文件夾就叫pic7.rc,右擊,選擇添加資源,選擇Bitmap,再導(dǎo)入一張.bmp圖片(system32這個(gè)文件夾下這種圖片很多的),右擊導(dǎo)入的圖片,可以看到選項(xiàng)屬性,你把它的ID改為"tomato"(我隨便找了張tomato的圖片,你也可以把它定義為apple啊,或者banana啊什么的都行,只是你要在程序中改下它的名字就行了)好了,perfect!你運(yùn)行下看看,有了吧!

  現(xiàn)在介紹API的書有,介紹VC.NET的書也有,就是沒有如何實(shí)際寫程序時(shí)改怎么用的書!連基本的操作都不交,程序就沒法編譯了,程序都沒法去驗(yàn)證,怎么叫人家繼續(xù)學(xué)下去呢?中國人注重理論知識(shí)一定要過硬,不過就我個(gè)人認(rèn)為還是老外的注重實(shí)際操作的學(xué)習(xí)方式更值得我們?nèi)ヌ岢?

  問題3____數(shù)據(jù)類型

  很多人搞不懂API里面"亂七八糟"的數(shù)據(jù)類型,哎呀,其實(shí)是你看的或?qū)懙奶俚木壒柿T了!

  這個(gè)我不說了,雖然確實(shí)是個(gè)問題,不過有點(diǎn)腦子的人都知道,上網(wǎng)可以找嘛,真的很多的,要是真的找不到,沒辦法,問我好了(我的個(gè)人隱私QQ:275913977)

  暫時(shí)想不到什么問題了,反正你只要知道程序的入口是int WINAPI WndMain(HINSTANCE,HINSTANCE,LPSTR,int){}

  當(dāng)事件發(fā)生了,就要用到switch(message){case}結(jié)構(gòu)了,因?yàn)榘l(fā)生了不同的事件要用不同的方式去處理,這個(gè)過程是在函數(shù)LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM)里執(zhí)行的,主要是(WndProc)!


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 多伦县| 鄢陵县| 凉城县| 玛纳斯县| 兰溪市| 大足县| 德令哈市| 鄂温| 岳池县| 临夏市| 鹰潭市| 景宁| 双江| 保德县| 临汾市| 广西| 泰安市| 麻栗坡县| 海南省| 乐清市| 锡林浩特市| 南木林县| 广汉市| 岳普湖县| 武胜县| 山丹县| 进贤县| 木里| 洛浦县| 福海县| 阿尔山市| 张家港市| 汉源县| 潞西市| 河池市| 虹口区| 堆龙德庆县| 辽阳市| 安庆市| 平度市| 普定县|