真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

wxWidgets第三課MSWWindowProc處理窗口消息

說(shuō)明
??? wxwidgets為不少的非常重要的windows事件定義一個(gè)事件宏(例如EVT_PAINT),但是例如WM_NCHITTEST等消息沒(méi)有定義宏。為了處理某些特殊的窗口消息,需要在wxWindow的派生類(lèi)中重寫(xiě)(也叫覆蓋override)基類(lèi)的虛函數(shù)MSWWindowProc(),通過(guò)判斷nMsg的參數(shù)值看看是否需要進(jìn)行處理,否則看看是否需要調(diào)用基類(lèi)的虛函數(shù)進(jìn)行處理

成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、南陵網(wǎng)絡(luò)推廣、微信小程序定制開(kāi)發(fā)、南陵網(wǎng)絡(luò)營(yíng)銷(xiāo)、南陵企業(yè)策劃、南陵品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供南陵建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com

使用
??? 在前面的文章中描述到,對(duì)于WM_NCLBUTTONDOWN,WM_NCMOUSEMOVE這些消息沒(méi)有定義相關(guān)的EVT事件,所以如果需要對(duì)這些消息進(jìn)行處理,就必須覆蓋掉基類(lèi)的消息處理,當(dāng)然在處理完成相應(yīng)的事件,之后也可以調(diào)用父類(lèi)的函數(shù),將消息傳遞下去

例子
class CDownLinkDataPlayBack:public wxPanel
{
protected:
virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
}
WXLRESULT CDownLinkDataPlayBack::MSWWindowProc( WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam )
{
if ( nMsg == WM_NCLBUTTONDOWN )
{
wxPoint pos = GetPosition();
m_orignalRectHeight = pos.y;
wxSize size = GetSize();
wxPoint pt = ClientToScreen(GetPosition());
m_ncMouseDownX = pt.x;
m_ncMouseDownY = pt.y;
m_curWindowStartX = pt.x - size.x;
m_curWindowStartY = pt.y - size.y;
}
if (nMsg == WM_NCMOUSEMOVE)
{
wxPoint pt = ClientToScreen(GetPosition());
m_ncMouseMoveX = pt.x;
m_ncMouseMoveY = pt.y;

wxScreenDC dc;
dc.SetPen(wxPen(*wxBLACK, 2, wxSOLID));
//dc.SetBrush(*wxTRANSPARENT_BRUSH);
dc.SetBrush(wxBrush(*wxBLACK));
wxSize size(30, m_orignalRectHeight);
wxPoint p(m_ncMouseDownX, m_ncMouseDownY);
//wxRect rect(wxPoint(m_curWindowStartX, m_curWindowStartY), size);
wxRect rect(wxPoint(0, 0), wxSize(300, 1400));
dc.DrawRectangle(rect);

WXHWND hwd = GetHWND();
RECT rect2;
wxRect rect3 = GetClientRect();
rect2.left = rect3.GetLeft();
rect2.top? = rect3.GetTop();
rect2.right = rect3.GetRight();
rect2.bottom = rect3.GetBottom();
ValidateRect(hwd, &rect2);

}
return wxPanel::MSWWindowProc(nMsg, wParam, lParam);
}

一些基本的事件宏定義說(shuō)明
??? 為一個(gè)窗口定義一系列的特定情況的事件列表,例如定時(shí)器,渲染,空閑處理等等

例子
#include "wx/event.h"

類(lèi)添加聲明事件列表宏
private:
DECLARE_EVENT_TABLE()

類(lèi)外添加事件列表定義宏
BEGIN_EVENT_TABLE(CFlightInstrumentPanel, wxPanel)
EVT_MOTION(CFlightInstrumentPanel::OnMotion)
EVT_PAINT(CFlightInstrumentPanel::OnPaint)
EVT_TIMER(TIMER_ID, CFlightInstrumentPanel::OnTimer)
EVT_IDLE(CFlightInstrumentPanel::OnIdle)
END_EVENT_TABLE()

說(shuō)明:CFlightInstrumentPanel繼承wxPanel,至于添加的事件函數(shù)的具體內(nèi)容,稍后進(jìn)行描述

wxIdleEvent 空閑事件處理說(shuō)明
??? 當(dāng)沒(méi)有消息需要處理的情況下,可以通過(guò)定義OnIdle事件處理消息函數(shù),來(lái)達(dá)到充分利用CPU的目的。當(dāng)用戶鼠標(biāo)按下,執(zhí)行大量的渲染,可能會(huì)出現(xiàn)屏幕的卡頓,如果讓OnIdle函數(shù)處理,就可以避免出現(xiàn)這個(gè)問(wèn)題

例子

#include "wx/event.h"

void OnIdle(wxIdleEvent& event);

EVT_IDLE(CFlightInstrumentPanel::OnIdle)

void CFlightInstrumentPanel::OnIdle( wxIdleEvent& event )
{
?static int x = 0;
?if (x<1000)
?{
??wxClientDC dc(this);
??wxPen pen(*wxRED,1);
??dc.SetPen(pen);
??dc.DrawRectangle(x, 0, 200, 300);
??dc.SetPen(wxNullPen);
??x=x+100;
?}
?event.Skip();
}

缺點(diǎn):不是一個(gè)定時(shí)器,而且只是在消息循環(huán)體中沒(méi)有任何消息的情況下,執(zhí)行該事件


網(wǎng)頁(yè)標(biāo)題:wxWidgets第三課MSWWindowProc處理窗口消息
本文路徑:http://weahome.cn/article/ipsgsh.html

其他資訊

在線咨詢(xún)

微信咨詢(xún)

電話咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部