青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

天地之靈學習小組
我們學習小組的OpenGL學習筆記 大家一定要互相折磨呀~~
posts - 150,  comments - 156,  trackbacks - 0
天地之靈16:11:17
然后呢,說一個最最最特殊的消息  
天地之靈16:11:21
WM_QUIT  
孫婷16:11:22
?  
天地之靈16:11:36
這是唯一一個跟窗口沒有關系的消息  
天地之靈16:11:44
它表示:這個程序要結束了  
天地之靈16:12:14
那么,最外面我們一開始那個循環,就應該結束了  
天地之靈16:12:39
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

while( true )
{      GetMessage(&msg,NULL,0,0));
TranslateMessage(&msg);
DispatchMessage(&msg);
}

回到婷婷剛才的問題  
天地之靈16:13:11
GetMessage的作用就是:等待一個消息。如果這個消息是WM_QUIT,那么返回FALSE。否則返回TRUE  
wtt PureMilk16:13:52
明白
天地之靈16:13:54
所以它們的區別就是,前面一個是標準的,當收到WM_QUIT消息的時候,循環結束,正常退出程序。
而后面那個,因為不能接受WM_QUIT消息,所以永遠不會結束  
天地之靈16:14:40
WM_QUIT的作用糖糖明白了嗎  
wtt PureMilk16:14:52
等一下又不明白了
天地之靈16:14:57
 
孫婷16:15:08
恩呢 
天地之靈16:15:16
哪里不明白了 
wtt PureMilk16:15:30
在我們的WindowProc里面是不會出現WM_QUIT的是嗎
天地之靈16:15:37
是的。 
天地之靈16:15:43
WM_QUIT是唯一一個與窗口無關的消息 
wtt PureMilk16:15:44
那它是怎么來的呢
孫婷16:15:52
WM_QUIT。。是不是就相當于我按下esc或者alt+f4的時候然后處理消息就推出了。。關了窗口了 
天地之靈16:15:56
它的來源是PostQuitMessage函數 
天地之靈16:16:05
糖糖:不完全是。 
wtt PureMilk16:16:09
啊我知道了
天地之靈16:16:18
其實,當你按下Alt+F4的時候,分為三個步驟 
wtt PureMilk16:16:20
case WM_CLOSE:
if(IDYES==MessageBox(hwnd,"是否真的結束?","weixin",MB_YESNO))
{
DestroyWindow(hwnd);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
天地之靈16:16:35
1、系統發出WM_CLOSE,表示用戶試圖關閉窗口 
天地之靈16:16:49
當然,這時候你可以彈一個提示確認一下 
wtt PureMilk16:16:57
MessageBox(hwnd,"是否真的結束?","weixin",MB_YESNO))
天地之靈16:17:13
2、DestroyWindow,真的關閉窗口,發出一個WM_DESTORY 
天地之靈16:17:32
3、如果這個窗口關閉就意味著程序結束,那么處理函數里發出一個PostQuitMessage 
天地之靈16:17:42
然后GetMessage返回FALSE,程序結束 
wtt PureMilk16:18:06
徹底明白
孫婷16:18:36
太神奇了 
天地之靈16:18:52
好,還有兩個內容,第一節課就結束了 
天地之靈16:19:07
內容1是:DefWindowProc 
天地之靈16:19:32
實際上系統發出的消息非常非常的多,種類十分十分復雜 
天地之靈16:19:40
而我們實際上只關心我們需要關心的消息 
天地之靈16:19:56
而對于我們不關心的消息,如果我們不做處理,有時候就會出問題 
天地之靈16:20:12
比如
case WM_CLOSE:
   return;
窗口就關不掉 
天地之靈16:20:33
對于這一類消息,我們通常是希望讓Windows幫我們處理 
天地之靈16:20:42
換句話說,“一般的窗口應該怎么做,就怎么做” 
天地之靈16:20:53
這就是DefWindowProc的作用 
天地之靈16:21:08
舉例來說,它會在WM_CLOSE的時候自動DestoryWindow 
wtt PureMilk16:21:15
真的耶
wtt PureMilk16:21:22
原來還是關掉了
天地之靈16:22:22
另外,DefWindowProc也是一個標準的WindowProc 
天地之靈16:22:53
換句話說,如果你什么消息都不想自己處理,你可以直接把DefWindowProc作為窗口類的WindowProc 
天地之靈16:23:25
內容2:PeekMessage 
天地之靈16:23:39
我們知道GetMessage的意思是“等著一個消息的發生” 
天地之靈16:23:57
而我們在還沒有消息發生的時候就什么也不能做了 
天地之靈16:24:36
而對于游戲來說,我們要求在沒有消息發生的時候,不斷地重新畫整個畫面 
天地之靈16:25:01
所以我們不能被GetMessage占住 
wtt PureMilk16:25:15
有道理
天地之靈16:25:21
PeekMessage的意思是:
如果有消息需要處理,返回TRUE,否則返回FALSE 
天地之靈16:26:07
另外它的參數有很多種,比如這個被取出的消息是否從消息隊列中清除 
天地之靈16:27:21
所以,我們可以寫
while (true)
{
   if (PeekMessage(xxxx, xxx, PM_REMOVE))
   {
     Tranlate
      Dispatch()
   }
   else
   {
      doSomething();
      Sleep(0);
   }

天地之靈16:27:43
Sleep(0);的目的是讓出CPU控制權,使得其他程序可以流暢運行,詳細的內容以后再講解 
wtt PureMilk16:28:03
耶,那豈不是又像我剛寫的那樣關不掉了
天地之靈16:28:12
是的 
天地之靈16:28:29
PeekMessage的一個不同的地方就是,它收到WM_QUIT時不會做什么特殊處理 
天地之靈16:28:40
我們要自己來做這個處理 
天地之靈16:28:57
while (true)
{
   if (PeekMessage(xxxx, xxx, PM_REMOVE))
   {
      if (msg.message == WM_QUIT) break;
     Tranlate
      Dispatch()
   }
   else
   {
      doSomething();
      Sleep(0);
   }

天地之靈16:29:56
另外,我讀過的代碼里,有許多程序沒有這個else。婷婷能分析下這樣會有什么不好么? 
天地之靈16:30:16
while (true)
{
   if (PeekMessage(xxxx, xxx, PM_REMOVE))
   {
      if (msg.message == WM_QUIT) break;
     Tranlate
      Dispatch()
   }
   doSomething();
   Sleep(0);
}

他們這么寫 
wtt PureMilk16:30:24
cpu占用率比較高?
天地之靈16:30:29
不是 
天地之靈16:30:34
仔細想想 
天地之靈16:31:13
答案是,這樣的代碼每次只能處理一個消息 
天地之靈16:31:19
然后就進入了doSomething 
wtt PureMilk16:31:44
哦……
天地之靈16:31:47
1、如果doSomething是個非常慢的函數,比如渲染圖形,那么對消息的處理也會很慢很慢 
wtt PureMilk16:31:56
知道了
天地之靈16:32:02
積壓的消息不能及時處理,就容易被windows認為沒有響應 
wtt PureMilk16:32:04
啊好有意思啊
天地之靈16:32:14
2、最壞的情況,如果doSomething里每次都發出了一個消息 
天地之靈16:32:30
那么消息就永遠處理不完了,最后程序就會出現錯誤 
wtt PureMilk16:32:38
嗯~
wtt PureMilk16:33:02
哇貓我自己學的話要學多久才能明白這一點哦
天地之靈16:33:19
while (true)
{
   if (PeekMessage(xxxx, xxx, PM_REMOVE))
   {
      if (msg.message == WM_QUIT) break;
     Tranlate
      Dispatch()
   }
   else
   {
      doSomething();
      Sleep(0);
   }
}


while (true)
{
   while (PeekMessage(xxxx, xxx, PM_REMOVE))
   {
      if (msg.message == WM_QUIT) break;
     Tranlate
      Dispatch()
   }
   if (msg.message == WM_QUIT) break;
   doSomething();
   Sleep(0);
}

這兩段代碼卻是等價的 
天地之靈16:34:05
第二段代碼里把if改為了while,意思就是:把所有的消息處理完,然后才做我想做的事情 
wtt PureMilk16:34:24
嗯~~明白
天地之靈16:34:39
另外,if/while (PeekMessage(xxxx, xxx, PM_REMOVE))
   {
      if (msg.message == WM_QUIT) break;
這個比較有時候比較討厭,我們可以更“優雅”的來寫 
wtt PureMilk16:35:00
怎么個優雅法?
天地之靈16:35:23
if/while (PeekMessage(xxxx, xxx, PM_NOREMOVE))
   {
      if (GetMessage(xxx, xxx))
      {
         Tranlate
         Dispatch
      }
      else
         break; 
wtt PureMilk16:35:50
wow
天地之靈16:35:55
注意PeekMessage的參數變為了不移出 
天地之靈16:36:03
然后繼續利用GetMessage的返回值 
孫婷16:36:18
這樣有什么好處呢? 
天地之靈16:36:23
比較帥 
wtt PureMilk16:36:25
漂亮
孫婷16:36:27
- -0 
天地之靈16:36:30
這個技巧我是在我遺留的早期代碼里學到的 
孫婷16:36:31
很好 
天地之靈16:36:37
我已經忘記早期的我在哪里學到的了 
wtt PureMilk16:36:40
是很漂亮,漂亮多了
天地之靈16:37:25
 
天地之靈16:37:36
關于消息、消息循環的所有內容都已經講完了 
wtt PureMilk16:37:58
貓我好崇拜你喔
天地之靈16:38:14
 
孫婷16:38:24
哇卡卡卡~~~我今天會失眠。。 
wtt PureMilk16:40:58
天地之靈(402740419)  16:22:53
換句話說,如果你什么消息都不想自己處理,你可以直接把DefWindowProc作為窗口類的WindowProc

這句話的意思是,什么消息都自己動手寫代碼嗎
天地之靈16:41:09
不是 
天地之靈16:41:23
如果你想寫一個“非常標準”的窗口,什么消息你都不需要知道 
wtt PureMilk16:41:24
那是什么都不自己動手寫
天地之靈16:41:32
對,你就可以什么都不寫 
wtt PureMilk16:41:45
哦哦哦我明白了
孫婷16:41:47
為什么呢? 
wtt PureMilk16:41:49
看錯了
孫婷16:42:12
自己寫的和標準窗口是不一樣的么? 
wtt PureMilk16:42:16
就是連WindowProc都不要了對吧
天地之靈16:42:18
恩 
wtt PureMilk16:42:28
誰的恩?
孫婷16:42:33
那我怎么在這個窗口做什么啊。。 
天地之靈16:42:33
恩婷婷的 
天地之靈16:42:54
有時候就什么也不做啊 
天地之靈16:43:19
一般在游戲里寫WindowProc就是為了一個WM_CLOSE一個WM_DESTORY 
天地之靈16:43:28
在很特殊的時候也許會連這兩個也用不著 
 

FeedBack:
# re: 11月9日_貓很強大_By PureMilk
2008-11-09 22:16 | 陳梓瀚(vczh)
真有耐心……我都是直接翻msdn的那個條目,按字母排序看的……  回復  更多評論
  
# re: 11月9日_貓很強大_By PureMilk
2008-11-10 08:55 | 肖赫_王婷婷_王冠_鄭燚_孫婷
@陳梓瀚(vczh)
恩貓確實很有耐心  回復  更多評論
  

<2008年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(6)

隨筆分類(149)

隨筆檔案(150)

同道中人

搜索

  •  

積分與排名

  • 積分 - 50618
  • 排名 - 457

最新隨筆

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧洲日本mm| 亚洲欧美成人在线| 毛片基地黄久久久久久天堂| 午夜一区在线| 国产一区二区三区电影在线观看| 欧美在线视频免费播放| 亚洲欧美日韩综合| 国产亚洲免费的视频看| 美女啪啪无遮挡免费久久网站| 久久激情中文| 亚洲精品视频一区| 在线视频免费在线观看一区二区| 国产精品手机视频| 老巨人导航500精品| 欧美裸体一区二区三区| 亚洲一区二区伦理| 欧美一区二区在线观看| 亚洲激情精品| 亚洲少妇最新在线视频| 黄色一区二区三区| 亚洲精品中文字幕在线观看| 国产精品午夜春色av| 免费观看在线综合色| 欧美三级日韩三级国产三级| 久久都是精品| 欧美日韩国产精品专区| 久久久99精品免费观看不卡| 免费日本视频一区| 性欧美激情精品| 你懂的一区二区| 久久国产精品久久久久久电车| 久久综合狠狠| 久久av老司机精品网站导航| 欧美国产精品劲爆| 久久久99精品免费观看不卡| 欧美精品在线视频观看| 噜噜噜噜噜久久久久久91| 欧美日韩中文字幕在线| 麻豆精品一区二区综合av| 欧美日韩在线影院| 亚洲国产精品一区二区www| 国产精品网站在线播放| 亚洲啪啪91| 亚洲国产精品电影| 欧美一区二区啪啪| 亚洲影音先锋| 欧美欧美在线| 亚洲精品1区| 亚洲国产精品第一区二区三区| 亚洲欧美在线看| 亚洲免费在线电影| 欧美日韩免费观看一区二区三区| 免费成人网www| 国产一区在线看| 欧美一区二区三区四区高清| 午夜精品一区二区在线观看| 欧美日韩国产欧美日美国产精品| 免播放器亚洲| 亚洲国产精品久久精品怡红院| 欧美一区二区三区久久精品茉莉花| 亚洲免费视频观看| 国产精品v欧美精品v日韩| 亚洲国产一区二区三区在线播| 亚洲观看高清完整版在线观看| 久久精品国产2020观看福利| 久久精品国产2020观看福利| 国产麻豆精品视频| 欧美一区二区高清在线观看| 欧美影院视频| 好看的日韩av电影| 久久久久综合网| 欧美风情在线观看| 最新成人av网站| 欧美国产精品专区| 亚洲美女诱惑| 午夜性色一区二区三区免费视频| 国产精品草莓在线免费观看| 亚洲一区二区视频在线观看| 亚洲免费一级电影| 国产日产欧美一区| 久久精品观看| 最新国产成人av网站网址麻豆| 亚洲精品综合久久中文字幕| 欧美日韩免费一区| 亚洲一区二区三区精品在线| 久久国产精品一区二区三区四区| 国产夜色精品一区二区av| 久久久亚洲欧洲日产国码αv| 欧美激情一区二区三区不卡| 夜夜精品视频| 国产欧美日韩精品丝袜高跟鞋| 久久成人免费日本黄色| 欧美激情一区二区三区不卡| 一本不卡影院| 国产亚洲精品资源在线26u| 久久亚洲综合网| 99精品欧美一区| 久久久久久电影| 亚洲日本激情| 国产精品视频福利| 久久精品一区蜜桃臀影院| 亚洲激精日韩激精欧美精品| 亚洲欧美国内爽妇网| 一区二区三区自拍| 欧美视频在线观看一区| 久久精品国产久精国产思思| 91久久精品国产| 久久精品视频导航| 99国产精品自拍| 一区二区三区中文在线观看| 欧美日韩国产精品成人| 久久精品一二三| 亚洲小少妇裸体bbw| 亚洲高清不卡一区| 久久婷婷蜜乳一本欲蜜臀| 亚洲天堂av在线免费| 在线观看欧美黄色| 国产精品制服诱惑| 欧美日韩午夜剧场| 久久嫩草精品久久久精品一| 在线一区二区视频| 亚洲精品一级| 欧美大色视频| 久久久久久亚洲精品杨幂换脸| 亚洲一二三区精品| 亚洲精品在线免费观看视频| 国产又爽又黄的激情精品视频| 国产精品高清网站| 欧美日韩1区2区3区| 免费在线亚洲| 美女999久久久精品视频| 午夜在线电影亚洲一区| 中文日韩在线| 在线视频欧美日韩| 日韩视频在线一区二区| 欧美激情影音先锋| 欧美凹凸一区二区三区视频| 久久精品日产第一区二区| 欧美一区不卡| 香蕉久久国产| 欧美一区午夜视频在线观看| 亚洲主播在线播放| 亚洲一区二区三区午夜| 在线视频欧美一区| 一区二区不卡在线视频 午夜欧美不卡在| 亚洲高清视频一区二区| 亚洲国产另类久久精品| 亚洲国产精品福利| 亚洲精品一区二区三| 亚洲精品国产精品国产自| 91久久国产综合久久蜜月精品| 亚洲国产精品久久久久久女王| 亚洲国产高清aⅴ视频| 亚洲高清中文字幕| 亚洲毛片播放| 亚洲五月六月| 久久9热精品视频| 久久久久久夜精品精品免费| 久久人人97超碰国产公开结果| 老司机一区二区三区| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美成人亚洲| 一区二区精品| 久久精品欧洲| 欧美伦理一区二区| 国产麻豆成人精品| 亚洲第一黄网| 中国女人久久久| 久久久久九九九| 亚洲成在人线av| 亚洲一区二区三| 久久久99免费视频| 欧美日韩国产在线播放| 国产日韩欧美不卡| 亚洲精品网站在线播放gif| 亚洲综合导航| 欧美成人免费视频| 一区二区三区 在线观看视| 欧美一区影院| 欧美美女操人视频| 国内精品免费午夜毛片| 日韩天堂在线观看| 久久精品国产免费观看| 亚洲精品国产系列| 欧美与欧洲交xxxx免费观看| 欧美国产成人在线| 国产一区二区在线观看免费播放| 亚洲精品婷婷| 久久一区二区三区av| av成人激情| 免费视频一区| 国产视频观看一区| 在线亚洲国产精品网站| 欧美14一18处毛片| 亚洲宅男天堂在线观看无病毒| 农夫在线精品视频免费观看| 国产欧美va欧美va香蕉在| 99在线观看免费视频精品观看| 久久久7777| 亚洲欧美激情视频|