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

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

DirectUI(一)

Posted on 2009-10-11 00:36 S.l.e!ep.¢% 閱讀(1722) 評論(0)  編輯 收藏 引用 所屬分類: DirectUI
LRESULT?CALLBACK?CWindowWnd::__ControlProc(HWND?hWnd,?UINT?uMsg,?WPARAM?wParam,?LPARAM?lParam)
{
???CWindowWnd
* ?pThis? = ?NULL;

???
if (?uMsg? == ?WM_NCCREATE?)?
???{
??????LPCREATESTRUCT?lpcs?
= ?reinterpret_cast < LPCREATESTRUCT > (lParam);
??????pThis?
= ?static_cast < CWindowWnd *> (lpcs -> lpCreateParams);
??????pThis
-> m_hWnd? = ?hWnd;
??????::SetProp(hWnd,?
" WndX " ,?(HANDLE)?pThis);
???}?
???
else ?
???{
??????pThis?
= ?reinterpret_cast < CWindowWnd *> (::GetProp(hWnd,? " WndX " ));
??????
if (?uMsg? == ?WM_NCDESTROY? && ?pThis? != ?NULL?)?
??????{
?????????LRESULT?lRes?
= ?::CallWindowProc(pThis -> m_OldWndProc,?hWnd,?uMsg,?wParam,?lParam);
?????????::SetProp(hWnd,?
" WndX " ,?NULL);
?????????
if (?pThis -> m_bSubclassed?)?pThis -> Unsubclass();
?????????pThis
-> m_hWnd? = ?NULL;
?????????pThis
-> OnFinalMessage(hWnd);
?????????
return ?lRes;
??????}
???}

???
if (?pThis? != ?NULL?)?
???{
??????
return ?pThis -> HandleMessage(uMsg,?wParam,?lParam);
???}?
???
else ?
???{
??????
return ?::DefWindowProc(hWnd,?uMsg,?wParam,?lParam);
???}
}

LRESULT?CALLBACK?CWindowWnd::__WndProc(HWND?hWnd,?UINT?uMsg,?WPARAM?wParam,?LPARAM?lParam)
{
???CWindowWnd
* ?pThis? = ?NULL;
???
if (?uMsg? == ?WM_NCCREATE?)?
???{
??????LPCREATESTRUCT?lpcs?
= ?reinterpret_cast < LPCREATESTRUCT > (lParam);
??????pThis?
= ?static_cast < CWindowWnd *> (lpcs -> lpCreateParams);
??????pThis
-> m_hWnd? = ?hWnd;
??????::SetWindowLongPtr(hWnd,?GWLP_USERDATA,?reinterpret_cast
< LPARAM > (pThis));
???}?
???
else ?
???{
??????pThis?
= ?reinterpret_cast < CWindowWnd *> (::GetWindowLongPtr(hWnd,?GWLP_USERDATA));
??????
if (?uMsg? == ?WM_NCDESTROY? && ?pThis? != ?NULL?)?
??????{
?????????LRESULT?lRes?
= ?::CallWindowProc(pThis -> m_OldWndProc,?hWnd,?uMsg,?wParam,?lParam);
?????????::SetWindowLongPtr(pThis
-> m_hWnd,?GWLP_USERDATA,? 0L );
?????????
if (?pThis -> m_bSubclassed?)?pThis -> Unsubclass();
?????????pThis
-> m_hWnd? = ?NULL;
?????????pThis
-> OnFinalMessage(hWnd);
?????????
return ?lRes;
??????}
???}

???
if (?pThis? != ?NULL?)?
???{
??????
return ?pThis -> HandleMessage(uMsg,?wParam,?lParam);
???}?
???
else
???{
??????
return ?::DefWindowProc(hWnd,?uMsg,?wParam,?lParam);
???}
}


當 CreateWindow 采用已存在的類時,使用的是 __ControlProc, 位于 RegisterSuperclass()
wc.lpfnWndProc = CWindowWnd::__ControlProc;

當 CreateWindow 采用創建的類時,使用的是????? __WndProc, 位于 RegisterWindowClass()
wc.lpfnWndProc = CWindowWnd::__WndProc;

這兩個函數唯一不同的是,
__ControlProc 使用 SetProp() 的方式來設置 This 指針, 而
__WndProc???? 使用? SetWindowLogPtr -> GWLP_USERDATA 的方式來設置 This 指針

·使用已存在的類時,或許是怕別人已經設置過 GWLP_USERDATA ,所以這里采用了 SetProp() 的方式

void ?CWindowWnd::CenterWindow()
{
???ASSERT(::IsWindow(m_hWnd));
???ASSERT((GetWindowStyle(m_hWnd)
& WS_CHILD) == 0 );

???RECT?rcDlg?
= ?{? 0 ?};
???::GetWindowRect(m_hWnd,?
& rcDlg);
???RECT?rcArea?
= ?{? 0 ?};
???RECT?rcCenter?
= ?{? 0 ?};
???HWND?hWndParent?
= ?::GetParent(m_hWnd);
???HWND?hWndCenter?
= ?::GetWindowOwner(m_hWnd);
???::SystemParametersInfo(SPI_GETWORKAREA,?NULL,?
& rcArea,?NULL);
???
if (?hWndCenter? == ?NULL?)?rcCenter? = ?rcArea;? else ?::GetWindowRect(hWndCenter,? & rcCenter);

???
int ?DlgWidth? = ?rcDlg.right? - ?rcDlg.left;
???
int ?DlgHeight? = ?rcDlg.bottom? - ?rcDlg.top;

???
// ?Find?dialog's?upper?left?based?on?rcCenter
??? int ?xLeft? = ?(rcCenter.left? + ?rcCenter.right)? / ? 2 ? - ?DlgWidth? / ? 2 ;
???
int ?yTop? = ?(rcCenter.top? + ?rcCenter.bottom)? / ? 2 ? - ?DlgHeight? / ? 2 ;

???
// ?The?dialog?is?outside?the?screen,?move?it?inside
??? if (?xLeft? < ?rcArea.left?)?
???????xLeft?
= ?rcArea.left;
???
else ? if (?xLeft? + ?DlgWidth? > ?rcArea.right?)?
???????xLeft?
= ?rcArea.right? - ?DlgWidth;
???
???
if (?yTop? < ?rcArea.top?)?
???????yTop?
= ?rcArea.top;
???
else ? if (?yTop? + ?DlgHeight? > ?rcArea.bottom?)?
???????yTop?
= ?rcArea.bottom? - ?DlgHeight;

???::SetWindowPos(m_hWnd,?NULL,?xLeft,?yTop,?
- 1 ,? - 1 ,?SWP_NOSIZE? | ?SWP_NOZORDER? | ?SWP_NOACTIVATE);
}

·一直以為有 CenterWindow() 這個API……,看來是因為MFC用久的緣故罷

HWND?CWindowWnd::Create(HWND?hwndParent,?LPCTSTR?pstrName,?DWORD?dwStyle,?DWORD?dwExStyle,?int?x,?int?y,?int?cx,?int?cy,?HMENU?hMenu)
{
???
if(?GetSuperClassName()?!=?NULL?&&?!RegisterSuperclass()?)?
???????
return?NULL;
???
???
if(?GetSuperClassName()?==?NULL?&&?!RegisterWindowClass()?)?
???????
return?NULL;
???
???m_hWnd?
=?::CreateWindowEx(dwExStyle,?GetWindowClassName(),?pstrName,?dwStyle,?x,?y,?cx,?cy,?hwndParent,?hMenu,?CPaintManagerUI::GetResourceInstance(),?this);
???ASSERT(m_hWnd
!=NULL);

???
return?m_hWnd;
}

這里在 lpParam 參數將 this 指針傳過去,在 WM_NCCREATE? 消息中再獲取 this 指令,但MSDN 相關解釋卻是在 WM_CREATE? 消息處理……

lpParam
[in]? Pointer to a value to be passed to the window through the CREATESTRUCT structure (lpCreateParams member) pointed to by the lParam param of the WM_CREATE message. This message is sent to the created window by this function before it returns.

If an application calls CreateWindow to create a MDI client window, lpParam should point to a CLIENTCREATESTRUCT structure. If an MDI client window calls CreateWindow to create an MDI child window, lpParam should point to a MDICREATESTRUCT structure. lpParam may be NULL if no additional data is needed.

?

void?CWindowWnd::ResizeClient(int?cx?/*=?-1*/,?int?cy?/*=?-1*/)
{
???ASSERT(::IsWindow(m_hWnd));
???RECT?rc?
=?{?0?};;
???
if(?!::GetClientRect(m_hWnd,?&rc)?)
???????
return;
???
???
if(?cx?!=?-1?)?rc.right?=?cx;
???
if(?cy?!=?-1?)?rc.bottom?=?cy;
???
???
if(?!::AdjustWindowRectEx(&rc,?GetWindowStyle(m_hWnd),?(!(GetWindowStyle(m_hWnd)?&?WS_CHILD)?&&?(::GetMenu(m_hWnd)?!=?NULL)),?GetWindowExStyle(m_hWnd))?)?
???????
return;
???
???UINT?uFlags?
=?SWP_NOZORDER?|?SWP_NOMOVE;
???::SetWindowPos(m_hWnd,?NULL,?
0,?0,?rc.right?-?rc.left,?rc.bottom?-?rc.top,?uFlags);
}

AdjustWindowRectEx()

函數功能:該函數依據所需客戶矩形大小,計算需要的窗口矩形的大小。計算出的窗口矩形隨后可以傳送給CreateWindowEx函數,用于創建一個客戶區所需大小的窗口。
函數原型:BOOL AdjustWindowRectEX(LPRECT lpRect,DWORD dwStyte;BOOL bMenu;DWORD dwExStyle);
參數:
lpRect:指向RECT結構的指針,該結構包含所需客戶區域的左上角和右下角的坐標。函數返回時,該結構包含容納所需客戶區域的窗口的左上角和右下角的坐標。
dwStyle:指定將被計算尺寸的窗口的窗口風格。
bMenu:指示窗口是否有菜單。
dwExStyle:指定將被計算尺寸的窗口的擴展窗口風格。
返回值:如果函數成功,返回值為非零;如果函數失敗,返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。
備注:客戶矩形是指完全包含一個客戶區域的最小矩形;窗口矩形是指完全包含一個窗口的最小矩形,該窗口包含客戶區與非客戶區。
當一個菜單條下拉出兩行或更多行時,AdjustWindowRect函數不增加額外的空間。
速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;頭文件:winuser.h;庫文件:user32.lib。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美一区二区三区男人的天堂| 国产精品免费观看在线| 麻豆精品国产91久久久久久| 欧美与黑人午夜性猛交久久久| 中日韩美女免费视频网站在线观看| 亚洲乱码精品一二三四区日韩在线| 最新成人在线| 日韩视频专区| 妖精成人www高清在线观看| 一区二区三区.www| 午夜精品网站| 久久视频精品在线| 免费不卡视频| 亚洲精品永久免费| 午夜精品视频在线观看| 麻豆成人在线观看| 欧美日韩精品免费观看| 国产女人aaa级久久久级| 永久免费视频成人| 亚洲天堂成人在线观看| 久久五月婷婷丁香社区| 亚洲美女视频在线免费观看| 性欧美超级视频| 欧美激情视频网站| 国产日韩欧美不卡| 日韩午夜av电影| 久久久久久久综合狠狠综合| 亚洲欧洲综合另类| 亚洲一区二区三区四区在线观看| 久久久www| 国产精品久久久久久久久久ktv| 伊人婷婷欧美激情| 亚洲欧美日韩精品综合在线观看| 欧美不卡一区| 午夜精品一区二区三区在线视 | 久久综合综合久久综合| 亚洲福利视频免费观看| 羞羞漫画18久久大片| 欧美激情影院| 黄色亚洲精品| 欧美一二三视频| 99精品欧美一区| 欧美成人亚洲成人日韩成人| 激情婷婷亚洲| 久久黄色小说| 亚洲小说欧美另类婷婷| 欧美日韩精品在线| 亚洲人成网在线播放| 久久综合久久综合久久| 亚洲一级特黄| 国产精品一区视频| 亚洲永久在线观看| 欧美成人国产| 国产嫩草一区二区三区在线观看 | 久久成人精品电影| 一区二区三区视频在线 | 欧美另类在线播放| 亚洲乱码一区二区| 欧美大片在线看| 久久亚洲图片| 亚洲国产高清在线观看视频| 麻豆国产va免费精品高清在线| 先锋影音国产精品| 国产女主播一区二区| 香蕉成人伊视频在线观看| 一区二区三区日韩在线观看| 国产精品国产成人国产三级| 亚洲一二三区视频在线观看| 一区二区三区欧美在线| 欧美午夜不卡影院在线观看完整版免费| 亚洲每日更新| 99在线精品视频| 国产精品区一区二区三| 久久精品盗摄| 久久亚洲影院| 一本大道久久精品懂色aⅴ| 亚洲精品欧美精品| 国产精品swag| 久久久国产91| 欧美激情女人20p| 亚洲欧美久久| 久久成人av少妇免费| 亚洲国产小视频在线观看| 亚洲国产成人porn| 欧美午夜精品理论片a级大开眼界| 亚洲欧美日韩在线观看a三区| 久久99伊人| 99伊人成综合| 午夜精品久久久久久久久久久久久 | 久久五月天婷婷| 一区二区欧美亚洲| 亚洲欧美在线x视频| 精品福利电影| 亚洲精品在线观| 狠狠色丁香久久婷婷综合_中| 亚洲黄色影片| 国产在线麻豆精品观看| 亚洲精品一区中文| 激情校园亚洲| 亚洲一区二区三区四区五区午夜| 在线观看免费视频综合| 一区二区三区波多野结衣在线观看| 国产一级一区二区| 一本久久知道综合久久| 亚洲国产欧美日韩精品| 亚洲欧美日韩中文视频| 99亚洲视频| 裸体一区二区| 亚洲校园激情| 日韩小视频在线观看专区| 亚洲欧美影院| 亚洲视频每日更新| 老司机成人在线视频| 欧美一区二区三区免费看 | 免费亚洲电影| 久久久福利视频| 国产精品二区在线观看| 亚洲高清视频在线观看| 国产最新精品精品你懂的| 在线亚洲一区| 亚洲视频免费| 欧美日韩大陆在线| 欧美激情小视频| 一区二区三区亚洲| 欧美亚洲在线| 欧美一区二区三区啪啪| 欧美性色aⅴ视频一区日韩精品| 欧美激情aaaa| 亚洲激情一区二区| 麻豆91精品| 欧美国产精品| 亚洲国产精品成人久久综合一区| 欧美影院久久久| 久久久久国产精品麻豆ai换脸| 国产女主播一区二区| 亚洲欧美日韩在线不卡| 午夜精品久久| 国产亚洲激情视频在线| 午夜影院日韩| 久久亚洲风情| 亚洲第一精品夜夜躁人人躁| 久久久蜜桃一区二区人| 欧美电影资源| 亚洲美女在线观看| 欧美日韩精品三区| 一区二区三区|亚洲午夜| 亚洲欧美国产精品va在线观看| 国产精品v欧美精品∨日韩| 夜夜精品视频一区二区| 午夜精品一区二区在线观看| 国产农村妇女精品| 久久久青草婷婷精品综合日韩| 欧美不卡在线视频| 99亚洲视频| 国产欧美成人| 麻豆精品视频在线观看| 亚洲美女少妇无套啪啪呻吟| 亚洲摸下面视频| 黄色亚洲网站| 欧美激情小视频| 亚洲一区激情| 免费成人美女女| 一区二区三区不卡视频在线观看| 欧美视频一区二区三区四区| 小嫩嫩精品导航| 亚洲国产乱码最新视频| 亚洲女人小视频在线观看| 韩国三级电影久久久久久| 免费观看不卡av| 一区二区三区鲁丝不卡| 六月丁香综合| 亚洲一区精彩视频| 国产一区日韩欧美| 欧美理论在线播放| 性欧美video另类hd性玩具| 亚洲福利在线视频| 亚洲另类自拍| 亚洲小说区图片区| 国产欧美日韩91| 欧美丰满少妇xxxbbb| 亚洲视频香蕉人妖| 欧美mv日韩mv国产网站| 亚洲在线视频| 亚洲激情成人网| 国产日韩精品一区二区浪潮av| 久久综合99re88久久爱| 亚洲先锋成人| 亚洲精品视频在线看| 毛片基地黄久久久久久天堂| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 一区二区三区国产在线| 巨乳诱惑日韩免费av| 亚洲欧美在线免费观看| 最新国产の精品合集bt伙计| 国产欧美日韩一区| 国产精品成人午夜| 奶水喷射视频一区| 久久电影一区| 欧美一级夜夜爽| 亚洲欧美国产77777|