锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
浠嬬粛:
鍒╃敤Win32 鏉ュ鐞哅yGui 3.0.1鐨勪腑鏂囪緭鍏ャ?br>
瀹炵幇:
閰嶇疆榪樻槸鍙傝冪綉涓婄殑閰嶇疆錛屼富瑕佸啀鍔犱腑鏂囧瓧浣?
濡備笅:
鈻?nbsp;鏇存敼閰嶇疆鏂囦歡MyGUI3.0\Media\MyGUI_Media涓?br>
鈽?nbsp;core_font.xml娣誨姞
<Resource type="ResourceTrueTypeFont" name="font_Simhei">
<Property key="Source" value="simhei.ttf"/>
<Property key="Size" value="19"/>
<Property key="Resolution" value="50"/>
<Property key="Antialias" value="false"/>
<Property key="SpaceWidth" value="4"/>
<Property key="TabWidth" value="8"/>
<Property key="CursorWidth" value="2"/>
<Property key="Distance" value="6"/>
<Property key="OffsetHeight" value="0"/>
<Codes>
<Code range="33 126"/>
<Code range="19969 40869"/>
<Code hide="128"/>
<Code hide="1026 1039"/>
<Code hide="1104"/>
</Codes>
</Resource>
鈽?nbsp;simhei.ttf瑕佷粠緋葷粺鐩綍涓嬬殑Fonts鎷瘋礉鍒板綋鍓嶇洰褰曘?br>
鈽?nbsp;core_settings.xml涓皢榛樿瀛椾綋鏀規(guī)垚
<MyGUI type="Font">
<Property key="Default" value="font_Simhei"/>
</MyGUI> 

榪愯Demo瑙e喅鏂規(guī): solution_directx銆?br>
緇橞aseManager娣誨姞Win32娑堟伅鍝嶅簲鍑芥暟void ProcIO(UINT messgae, WPARAM wParam, LPARAM lParam ).
case WM_CHAR:
case WM_KEYDOWN:
case WM_KEYUP:
{
base::BaseManager *baseManager = (base::BaseManager*)GetWindowLongPtr(hWnd, GWL_USERDATA);
if ( baseManager )
baseManager->ProcIO( uMsg , wParam , lParam );
break;
}
ProcIO涓昏鏄
WM_CHAR 瀛楃鍝嶅簲
WM_KEYDOWN/WM_KEYUP 鎸夐敭鍝嶅簲
鍦ㄥ鐞嗗瓧絎﹀搷搴旂殑鏃跺欓渶瑕佸尯鍒嗚緭鍏ユ硶鐘舵佸拰闈炶緭鍏ユ硶鐘舵佺殑瀛楃鍝嶅簲銆?br>
case WM_CHAR:
{
if ( ImmIsIME( GetKeyboardLayout(0) ))
ProcChar( wParam , lParam );
else
{
MyGUI::InputManager::getInstance().injectKeyPress(MyGUI::KeyCode::Enum(scan_code), code_point);
};
}
break;
ProcChar鍑芥暟涓昏澶勭悊涓枃銆傚洜涓烘眽瀛椾負(fù)8涓瓧鑺備細(xì)鍝嶅簲WM_CHAR2嬈°傞渶瑕佽繘琛岀粍鍚堜竴嬈°?br>WM_KEYDOWN錛氫富瑕佸鐞嗕竴浜沇idget瀛楃杈撳叆銆傚悓鏃惰繕鍙互鍋氬叏灞閿洏淇℃伅鐩戞帶錛堝揩鎹烽敭錛?
鍒ゆ柇涓涓猈idget鏄惁鍙互榪涜瀛楃杈撳叆:
\MyGUIEngine\include\MyGUI_InputManager.cpp
bool InputManager::isKeyInputCapture()
{
if( !mWidgetKeyFocus ) return false;
std::string strName = mWidgetKeyFocus->getTypeName();
if ( strName == "ComboBox" ||
strName == "Edit" ||
strName == "Message" ||
strName == "List")
{
return true;
}
return false;
}
鐢變簬閲囩敤Win32閿洏娑堟伅錛屽簲璇ュ睆钄借嚜甯IS鐨勩?br>Input\OIS\InputManager.cpp
void InputManager::captureInput()
{
if (mMouse) mMouse->capture();
//mKeyboard->capture();
}
鍦―emo涓洃鎺ф寜閿秷鎭? DemoKeeper鍔熻兘鏄疷IManager )銆?br>
void DemoKeeper::injectKeyPress(MyGUI::KeyCode _key, MyGUI::Char _text)
{
if (_key == MyGUI::KeyCode::Grave)
{
mConsole->setVisible(!mConsole->isVisible());
return;
}
else if (_key == MyGUI::KeyCode::F2 )
{
MyGUI::Message::createMessageBox("Message", "Info", "Press F2 ", MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconInfo);
return;
}
else if (_key == MyGUI::KeyCode::F3 )
{
MyGUI::Message::createMessageBox("Message", "Info", "Press F3 ", MyGUI::MessageBoxStyle::Ok | MyGUI::MessageBoxStyle::IconInfo);
return;
}
base::BaseManager::injectKeyPress(_key, _text);
}
鏈鍚庨檮涓婃簮鐮佽В鍐蟲柟妗?
/Files/expter/MyGuiDemo.rar
鍥劇墖錛?img border=0 alt="" src="http://m.shnenglu.com/images/cppblog_com/expter/mygui.jpg" width=417 height=317>
]]>
閽堝鑷繁鐨勪竴涓唴瀛樻睜濡備綍嫻嬭瘯鍏舵ц兘.
浠嬬粛錛?br>1.鍐呭瓨姹犳祴璇曠敤渚嬬殑閫夊彇.
1.鍗曠嚎紼嬬殑鍒嗛厤鍜岄噴鏀?
2.鍐呭瓨鍥炴敹.
3.鎬ц兘鍏蟲敞.
鍏充簬鍐呭瓨姹犵殑璁捐鍜屽疄鐜扮綉涓婇亶鍦伴兘鏄紝鏈枃涓嶅叿浣撲粙緇嶅叧浜庡唴瀛樻睜鐨勫叿浣撳疄鐜板拰鏂瑰紡錛屼富瑕佹槸浠嬬粛璁捐涓涓唴瀛樻睜鎬庢牱鍘繪祴璇曞叾鎬ц兘鍜屽畨鍏ㄥ鐞嗭紝鏈変竴涓紑婧愮殑鍐呭瓨姹犻」鐩畉cmalloc涔熸湁浠嬬粛寰堝錛屼絾鏄負(fù)浜嗘弧瓚沖縐嶉渶姹傦紝浠g爜榪囦簬搴炲ぇ錛屾渶鍚庢垜鐢ㄦ潵嫻嬭瘯鍒嗛厤鎬ц兘嫻嬭瘯銆?/p>
1涓唴瀛樻睜鐨勬祴璇曠敤渚嬪簲璇ュ寘鍚細(xì)
1錛夎欏圭洰鍐呭瓨鍒嗛厤姒傜巼闅忔満鎬?
2錛夊悓鏃朵繚璇侀噴鏀劇殑闅忔満鎬?
3錛夊彲浠ユ敮鎸佸縐嶅垎閰嶆柟寮忥紙涓嶅悓澶у皬錛屼笉鍚屽璞″弬鏁扮瓑錛?
瑕佽揪鍒頒笂闈㈣姹傚垯鍙互璁捐
1.涓涓暟緇勬潵璁懼畾闇瑕佸垎閰嶇殑澶у皬銆?br> long arr[ ] = { 16,32,64,128,256,512,1024,2048,5120,5130,7000,6000,10240,15000,20000};
2.鏍規(guī)嵁闇姹傛潵鎸囧畾鍚勪釜澶у皬鐨勫垎閰嶅嚑鐜囷紝榪欏ソ姣旀湁澶氬皯姒傜巼閫変腑鏌愪釜鏁幫紙闇鐗瑰畾鐨勫垎閰嶏級:
A.閽堝榪欎釜闇姹傚彲浠ヨ瀹氬畾涓涓鐜囨暟緇凮dds,鏁扮粍鍊糰rrArr鐨勭儲寮曘?br>
B.閽堝Odds鎸囧畾鏁扮粍鏁版嵁錛屼嬌鍏舵暟鎹垎閰嶈揪鍒癮rr闇瑕佸垎閰嶆鐜囥?br>
/**//// 琚垎閰嶇殑姒傜巼
long Odds[ ] =
{ 0,0,0,1,1,2,2,2,3,3,4,4,4,4,5,5,5,5,6,6,,7,7,7,8,8,8,8,9,9,9,10,10,11,12,12};
C.闅忔満Odds鏁扮粍錛岀劧鍚庡緱鍒板叾鍊煎垎閰嶏紝鍏跺煎垯涓篈rr鐨勭儲寮曘?br>
long Asize= arr[ Odds[ rand()%size ] ] ;
3.閲婃斁淇濊瘉闅忔満鎬с?br> 浠涔堟椂鍊欓噴鏀撅紝浠ュ強(qiáng)鍒嗛厤浜嗗仛浠涔堢敤錛岄兘鏄張搴旂敤灞傚喅瀹氱殑錛屾墍浠ラ渶瑕佹妸鍒嗛厤鍑烘潵鐨勫唴瀛橀氳繃涓涓鍣ㄦ潵瀛樺偍.
鐢變簬鍒嗛厤鏄殢鏈烘э紝閭d箞閲婃斁鐨勬椂鍊欎篃淇濊瘉浜嗛殢鏈烘с?br>
4.鏀寔澶氱鍒嗛厤鏂瑰紡銆?br> A. 瀵硅薄鍒嗛厤:
MemFactory Memory;
A* a = Memory.Alloc<A>( );
B* b = Memory.Alloc<B,int>( 2 );
Memory.FreeObj( a );
Memory.FreeObj( b );B.鐩存帴鍒嗛厤
void* p1 = Memory.Alloc( Asize );
5.鎬ц兘嫻嬭瘯
涓轟簡嫻嬭瘯鎬ц兘錛屾垜閫夋嫨浜嗗垎閰?000W嬈★紝鍏朵腑鐢ㄤ竴涓鍣ㄤ繚瀛樺垎閰嶇殑鏁版嵁錛岀劧鍚庡綋瀹瑰櫒鍒拌揪100W鐨勬椂鍊欓噴鏀?0W鏁版嵁(淇濊瘉鏁版嵁姝e湪浣跨敤錛岄殢鏈洪噴鏀?銆?br> 涓嬮潰鐨凙lloc time 鍙槸緇熻鐨凙lloc鏃墮棿绱姞錛孎ree time鍙槸緇熻鐨凢ree 鏃墮棿绱姞錛孴otal time璁板綍榪欐嫻嬭瘯鎬誨叡鑺辮垂鏃墮棿銆?/p>
嫻嬭瘯緇撴灉濡備笅:
MemPool Alloc time 3242 ms Free time: 2412 ms Total time 22535 ms
System Alloc time 33616 ms Free time: 6676 ms Total time 55013 ms
TCMalloc Alloc time 3451 ms Free time 1896 ms Toal time 21078 ms
鍙互鐪嬪埌TCMalloc鐨勫垎閰嶅拰閲婃斁閮芥瘮杈冨揩銆傘?br> 7
鍏朵腑arr姣忎釜鍒嗛厤鐨勫ぇ灝忓懡涓鐜囥?br> 9
Count[ 1 ] = 2436395
Count[ 2 ] = 1281728
Count[ 3 ] = 1026009
Count[ 4 ] = 769123
Count[ 5 ] = 768911
Count[ 6 ] = 769335
Count[ 7 ] = 640757
Count[ 8 ] = 640974
Count[ 9 ] = 512378
Count[ 10 ] = 384841
Count[ 11 ] = 256135
Count[ 12 ] = 257367
Count[ 13 ] = 256047
PS錛?br>1.鍐呭瓨姹犵殑浣跨敤錛?br>
涓鑸儏鍐典笅鍐呭瓨姹狅紝鏄暣鐞嗕竴鏁村潡鍐呭瓨錛岀劧鍚庨氳繃涓涓猯ist涓茶繛璧鋒潵錛岀劧鍚庡垎閰嶇殑鏃跺欎粠閾捐〃涓幏鍙栵紝閲婃斁涔熸槸鎻掑叆鍒伴摼琛ㄤ腑銆?br>
涓轟簡鏂逛究澶氬璞$殑澶氬弬鏁頒互鍙?qiáng)鏃犲弬鏁扮殑鍒嗛厤锛屽彲浠ヤ竴浜涘垪瀹忓拰妯℃澘鏉ュ疄鐜?
鍏蜂綋鐨勫彲浠ュ弬鑰冨悗闈㈤檮甯︾殑鍐呭瓨姹犲疄鐜扮殑浠g爜:
#define DEFINE_CALL_CON( paramcount ) template <class T, DP_STMP_##paramcount( typename, tp ) >\
inline T * Alloc(DP_MTMP_##paramcount( tp, p ) )
{\
unsigned long lSize = sizeof(T);\
void* ptMem = Alloc(lSize);\
if( !ptMem) return NULL; \
T * pt = new(ptMem)T( LP_SNMP_##paramcount( p ) );\
return pt;\
}
A. 瀵硅薄鍒嗛厤:
MemFactory Memory;
A* a = Memory.Alloc<A>( );
B* b = Memory.Alloc<B,int>( 2 );
C* c = Memory.Alloc<C,int,const char*>(1,"dd");
Memory.FreeObj( a );
Memory.FreeObj( b );
B.鐩存帴鍒嗛厤
void* p1 = Memory.Alloc( Asize );
2.鍐呭瓨姹犵殑浠g爜錛?br> 1) 瀹炵幇鍏ㄦ槸鍒╃敤鐨刦reelist,鍑忓皯鍐呭瓨寮閿錛屽垎閰嶉熷害錛岀洿鎺ュ畾浣嶃?br> 2) 綆$悊閮芥槸閫氳繃宸ュ巶綾繪潵鍚屼竴鐨勭鐞嗐?br> 3) 鎸囧畾鍒嗛厤絳栫暐.
婧愮爜涓篤s2008鐗堟湰...
/Files/expter/Pool.rar
鍏充簬瀹炵幇鏈夌枒闂拰寤鴻錛屽彲浠ユ彁鍑哄疂璐電殑鎰忚銆傘?/p>
function add ( x, y )
return x + y
end
#include <stdio.h>

extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}

/**//* the Lua interpreter */
lua_State * L;
int luaadd ( int x, int y )

{
int sum;
//鍑芥暟鍚?/span>
lua_getglobal(L, "add");
//絎竴涓弬鏁板帇鏍?/span>
lua_pushnumber(L, x);
//絎簩涓弬鏁板帇鏍?/span>
lua_pushnumber(L, y);
//璋冪敤鍑芥暟
lua_call(L, 2, 1);
//寰楀埌榪斿洖鍊?/span>
sum = (int)lua_tonumber(L, -1);
lua_pop(L, 1);
return sum;
}
int main ( int argc, char *argv[] )

{
int sum;
//鍒涘緩涓涓寚鍚慙ua瑙i噴鍣ㄧ殑鎸囬拡銆?/span>
L = lua_open();
//鍑芥暟鍔犺澆Lua搴?/span>
luaL_openlibs(L);
//鍔犺澆鑴氭湰
luaL_dofile(L,"add.lua");
//璋冪敤鍑芥暟
sum = luaadd( 10, 11);
// print the result
printf( "The sum is %d\n", sum );
//鍏抽棴 閲婃斁璧勬簮
lua_close(L);
return 0;
}
鐪嬩竴涓緥瀛愬氨鏄庣櫧浜嗭細(xì) 紼嬪簭浠g爜*鍦ㄥ璇濇涓彇鍑烘暟鎹紝騫跺悜鍏朵粬紿楀彛鍙戦佹秷鎭拰鏁版嵁錛屽皢鏁版嵁鎸囬拡浣滀負(fù)涓涓弬鏁板彂閫?/
void CTestDlg2::OnCommBtn()
{
char szOut[30];
GetDlgItemText(IDC_OUT,szOut,30);
m_pParent->SendMessage(WM_DLG_NOTIFY,(WPARAM)szOut);
}
/*鍦ㄦ秷鎭帴鏀剁獥鍙d腑*/
/*鏄犲皠娑堟伅澶勭悊鍑芥暟*/
ON_MESSAGE(WM_DLG_NOTIFY,OnDlgNotifyMsg)
/*鍦ㄨ鍥句腑緇樺埗鍑哄瓧絎︿覆 m_szOut*/
void CMy53_s1View::OnDraw(CDC* pDC)
{
CMy53_s1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->TextOut(0,0,"Display String");
pDC->TextOut(0,20,m_szOut);
}
/*澶勭悊閫氱煡娑堟伅錛屼繚瀛樹俊鎭茍鏇存柊鏄劇ず*/
LONG CMy53_s1View::OnDlgNotifyMsg(WPARAM wP,LPARAM lP)
{
m_szOut=(char*)wP;
Invalidate();
return 0;
}
涓涓瓧絎︿覆鐨勫湴鍧閫氳繃WPARAM鏉ユ爣璇嗭紝鍐嶉氳繃Windows娑堟伅鍙戦佸嚭鍘伙紱涔嬪悗鍦ㄦ秷鎭鐞嗗嚱鏁頒腑WPARAM鎺ュ彈鍒扮殑鍙傛暟灝辨槸璇ュ湴鍧錛岀劧鍚庡氨鍙互瀵硅鍦板潃榪涜鎿嶄綔浜嗭綖锝烇綖
榪欐槸Windows娑堟伅鏈哄埗涓粡甯哥敤鍒扮殑涓や釜data type錛屽懙鍛點(diǎn)?/p>