從零開始之窗體一

2021-08-27 05:56:51 字數 1908 閱讀 9281

一,窗體建立

二,窗體類

三,窗體顯示

四,應用程式訊息迴圈

二,窗體類

typedef struct _wndclass wndclass, *pwndclass; 

typedef struct _wndclas*** wndclas***, *pwndclas***; 

atom registerclass(

const wndclass *lpwndclass  // class data

);atom registerclas***(

const wndclas*** *lpwcx  // class data

);第二包括版本控制(cbsize),以及加入了乙個小圖示(hiconsm)資源.

三,窗體顯示

bool showwindow(

hwnd hwnd,     // handle to window

int ncmdshow   // show state

);在form的cm_showingchanged也是用的這個方法,也就是設定visible後.當然普通子控制項並不是如此(setwindowpos).

bool updatewindow(

hwnd hwnd   // handle to window

);直接傳送乙個只有重新整理區域的wm_paint訊息給hwnd,所以此函式意義不大.

四,應用程式訊息迴圈

while(getmessage(&msg,null,0,0))

bool getmessage(

lpmsg lpmsg,         // message information

hwnd hwnd,           // handle to window,特定的窗體控制代碼,這個地方容易和具體窗體訊息處理過程搞混.

uint wmsgfiltermin,  // first message

uint wmsgfiltermax   // last message

);主要看這個函式的返回值:只有收到的是wm_quit才返回0,也就是false,退出訊息迴圈(所以可以直接傳送wm_quit退出系統).

windows.postmessage(handle,wm_quit,0,0);注意第一必須用postmessage(上次說過sendmessage訊息佇列不同),第二句柄可以是當前執行緒任何窗體.

delphi訊息迴圈:

result := false;

if peekmessage(msg, 0, 0, 0, pm_remove) then

begin

result := true;

if msg.message <> wm_quit then

begin

handled := false;

if assigned(fonmessage) then fonmessage(msg, handled);

if not ishintmsg(msg) and not handled and not ismdimsg(msg) and

not iskeymsg(msg) and not isdlgmsg(msg) then   //特別注意這裡的鍵盤訊息,提示框訊息以及對話訊息處理

begin

translatemessage(msg);

dispatchmessage(msg);     //這是個神奇的函式

end;

endelse

fterminate := true;  //結束訊息迴圈

end;a

以上四個知識點,我相信大部分人都有接觸過,但真正意義上地想清楚的人不多,希望和大家一起把這四個知識點想清楚.

就我自己而言,接觸了無數遍,時間不下於五年,以上例子就是從06年的<

----------20100630 henry

PyTorch從零開始(一)

之前嘗試過tenano,caffe,keras,tensorflow,這幾個我個人最喜歡的還是tensorflow,因為是google出品,技術崇拜,文件很全,並且我看的deepmind的 都是用的tensorflow框架。之前看的目標檢測的 一般用caffe的很多,人臉識別方面也是caffe是主流...

SpringBoot從零開始(一)

上來先看的這篇部落格 idea新建乙個springboot mybatis mysql專案,以及遇到的問題分享。在其中第9步自動生成的過程中,出現了錯誤如下 the server time zone value is unrecognized or represents more than one ...

Django 從零開始

方法1 pip install django 1.6.5 測試是否安裝成功 python import django 1,6,5,final 0 django 使用了 python 標準的 distutils 安裝法,在 linux 平台可能包括如下步驟 tar xzvf django tar.gz...