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

08年05月05日

Posted on 2008-05-05 15:31 RichardHe 閱讀(1902) 評論(5)  編輯 收藏 引用
CEGUI的中文輸入:
目前為止為我解決的也是參考別人的方法改的代碼,不知道哪位兄臺有更好的解決方案?
源碼如下:
filename:   Win32AppHelper.h
在后面加一個
private:
    static bool d_mouseInWindow;
    static bool d_backSpace;//添加的成員變量
filename:   Win32AppHelper.cpp
bool Win32AppHelper::d_backSpace             = false;

/*************************************************************************
    Win32 'Window Procedure' function
************************************************************************
*/

LRESULT CALLBACK Win32AppHelper::wndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    
switch(message)
    {
    case WM_CHAR:
       {
            
if (ImmIsIME(GetKeyboardLayout(0)))
            {
                CEGUI::injectChar((CEGUI::utf32)wParam);                       
//方法在下面的全局函數(shù)
            }
            
else
            {
                CEGUI::System::getSingleton().injectChar((CEGUI::utf32)wParam);
            }
        }
        
break;

    
case    WM_IME_ENDCOMPOSITION:
        d_backSpace 
= true;
        
break;

    
case    WM_IME_STARTCOMPOSITION:
        d_backSpace 
= false;
        
break;

    
case WM_MOUSELEAVE:
        mouseLeaves();
        
break;

    
case WM_NCMOUSEMOVE:
        mouseLeaves();
        
break;

    
case WM_MOUSEMOVE:
        mouseEnters();

        CEGUI::System::getSingleton().injectMousePosition((
float)(LOWORD(lParam)), (float)(HIWORD(lParam)));
        
break;

    
case WM_LBUTTONDOWN:
        CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::LeftButton);
        
break;

    
case WM_LBUTTONUP:
        CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::LeftButton);
        
break;

    
case WM_RBUTTONDOWN:
        CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::RightButton);
        
break;

    
case WM_RBUTTONUP:
        CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::RightButton);
        
break;

    
case WM_MBUTTONDOWN:
        CEGUI::System::getSingleton().injectMouseButtonDown(CEGUI::MiddleButton);
        
break;

    
case WM_MBUTTONUP:
        CEGUI::System::getSingleton().injectMouseButtonUp(CEGUI::MiddleButton);
        
break;

    
case 0x020A// WM_MOUSEWHEEL:
        CEGUI::System::getSingleton().injectMouseWheelChange(static_cast<float>((short)HIWORD(wParam)) / static_cast<float>(120));
        
break;

    
case WM_DESTROY:
        PostQuitMessage(
0);
        
break;

    
case WM_SIZE:
        
// TODO: Notify about new size
        break;

    
case WM_PAINT:
        {
            HDC         hDC;
            PAINTSTRUCT ps;

            hDC 
= BeginPaint(hWnd, &ps);
            EndPaint(hWnd, 
&ps);
            
break;
        }

    
default:
        
return(DefWindowProc(hWnd, message, wParam, lParam));
        
break;
    }

    
return 0;
}
namespace CEGUI{
    bool injectChar(utf32 code_point )
    {
#ifndef UNICODE
        static char     s_tempChar[3]  = "";
        static wchar_t  s_tempWchar[2] = L"";
        static bool s_flag = false;
        unsigned char  uch  = (unsigned char)code_point;
        if( uch >= 0xA1 )
        {
            if( !s_flag )
            {
                s_tempChar[0] = (char)uch; //第一個字節(jié)
                s_flag = true;
                return true;
            }
            else if( uch >= 0xA1 )
            {
                s_tempChar[1] = (char)uch; //第二個字節(jié)
                s_flag = false;
                MultiByteToWideChar( 0, 0, s_tempChar, 2, s_tempWchar, 1); //轉(zhuǎn)成寬字節(jié)
                s_tempWchar[1] = L'\0';
                utf32 code = (utf32)s_tempWchar[0];
                //Font* fnt = System::getSingleton().getDefaultFont();
                return CEGUI::System::getSingleton().injectChar( code );
            }
            else
            {
                return CEGUI::System::getSingleton().injectChar(code_point);
            }
        }
        else
        {
            s_flag = false;
            return CEGUI::System::getSingleton().injectChar(code_point);
        }
#else
        return CEGUI::System::getSingleton().injectChar(code_point );
#endif
    }
}


至于退格鍵的解決方法如下,開始一直是在輸入法狀態(tài)下,如果按退格,不但刪除字母,同時也刪除了開始打好的了字.

 1 void Win32AppHelper::doDirectInputEvents(const Win32AppHelper::DirectInputState& dis)
 2 {
 3     // handle direct input based inputs
 4     DIDEVICEOBJECTDATA devDat;
 5     DWORD itemCount = 1;
 6 
 7     HRESULT res = dis.keyboardDevice->GetDeviceData(sizeof(DIDEVICEOBJECTDATA), &devDat, &itemCount, 0);
 8 
 9     if (SUCCEEDED(res))
10     {
11         if (itemCount > 0)
12         {
13             if (LOBYTE(devDat.dwData) & 0x80)
14             {
15                 // force quit on ESCAPE key
16                 if (devDat.dwOfs == CEGUI::Key::Escape)
17                 {
18                     PostQuitMessage(0);
19                 }
20                 else
21                 {
22                     if(!ImmIsIME( GetKeyboardLayout(0))) //輸入法沒關(guān)閉的時候才識別鍵盤事件可以防止backspace的bug
23                     {    
24                         CEGUI::System::getSingleton().injectKeyDown(devDat.dwOfs);
25                     }    
26                     if (d_backSpace)                     //解決退格時要到英文狀態(tài)下才可以刪除的問題.
27                     {
28                         CEGUI::System::getSingleton().injectKeyDown(devDat.dwOfs);
29                     }
30                 }
31 
32             }
33             else
34             {
35                 CEGUI::System::getSingleton().injectKeyUp(devDat.dwOfs);
36             }
37 
38         }
39     }
40     else
41     {
42         // try to re-acquire device if that was the cause of the error.
43         if ((res == DIERR_NOTACQUIRED) || (res == DIERR_INPUTLOST))
44         {
45             dis.keyboardDevice->Acquire();
46         }
47 
48     }
49 
50 }

上面的winpro方法里面我添加了兩個消息處理.
WM_IME_ENDCOMPOSITION  
WM_IME_STARTCOMPOSITION
具體說明請查找MSDN!
中文顯示問題請看前面一天的隨筆!

Feedback

# re: 08年05月05日  回復(fù)  更多評論   

2008-05-06 10:29 by cl
剛開始學的CEGUI,看了你的講解,還是不太明白,在Win32AppHelper.h和Win32AppHelper.cpp改了沒有用,你是在Sample_FontDemo例子里改的吧.
能發(fā)下你實現(xiàn)的具體例子代碼嗎???萬分的感謝了!!!
mail:chen375877324@163.com

# re: 08年05月05日  回復(fù)  更多評論   

2008-05-06 11:06 by RichardHe
@cl
上面已經(jīng)是全部代碼了.
Sample里面不用改東西的啊!
不知道你的程序沒有依賴Win32AppHelper.h生成的庫呢?
有什么不明白的地方加我MSN:richardhe@live.cn

# re: 08年05月05日  回復(fù)  更多評論   

2008-05-06 12:18 by cl
哦 可能是我中文顯示沒做出來 看不到結(jié)果 請問下在例子頭CEGUI系統(tǒng)如何把字體轉(zhuǎn)換成UTF8*具體代碼是怎么做的? 例如Sample里想把加載simhei.font
字體轉(zhuǎn)換成UTF8*
如:CEGUISystem->setDefaultFont((CEGUI::utf8*)"simhei")
這里代碼具體雜樣,網(wǎng)上找的代碼不全,用CEGUISystem不太明白,請問能發(fā)下
轉(zhuǎn)換成UTF8*的代碼嗎? 還有你說的把文件格式改成UTF-8格式,發(fā)現(xiàn)沒有多大的作用,還是需要在代碼里轉(zhuǎn)換啊!!

# re: 08年05月05日  回復(fù)  更多評論   

2008-05-06 14:18 by RichardHe
@cl
不用..新版本已經(jīng)支持UTF8了.所以你用文本編輯器如:EMEDITOR或是
ULTRAEDIT另存的時候選擇一下格式為UTF-8就可以了.
我的VanillaConsole.layout
修改如下:
<Window Type="Vanilla/Button" Name="Vanilla/Console/Submit">
<Property Name="ID" Value="1" />
<Property Name="VerticalAlignment" Value="Bottom" />
<Property Name="HorizontalAlignment" Value="Right" />
<Property Name="UnifiedMaxSize" Value="{{1,0},{1,0}}" />
<Property Name="UnifiedPosition" Value="{{0,-7},{0,-7}}" />
<Property Name="UnifiedSize" Value="{{0.25,0},{0,30}}" />
<Property Name="Text" Value="提交" />
</Window>
上面的"提交"為中文顯示在程序上 .

# re: 08年05月05日  回復(fù)  更多評論   

2008-10-15 14:45 by lost
呵呵 十分感謝

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


posts - 94, comments - 138, trackbacks - 0, articles - 94

Copyright © RichardHe

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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久久精品国产91久久| 国产日韩欧美一区二区三区四区| 免费久久99精品国产自| 国产精品国产三级国产aⅴ浪潮| 久久久久久久久蜜桃| 欧美理论电影网| 久久一区二区精品| 国产精品video| 欧美承认网站| 国产日韩精品一区二区| 亚洲精品女av网站| 国产精品人成在线观看免费| 欧美激情精品久久久久久黑人| 国产精品免费福利| 亚洲国产一区二区三区a毛片| 国产午夜精品一区理论片飘花| 亚洲精品人人| 亚洲国产欧美一区| 久久激情综合网| 性欧美8khd高清极品| 欧美激情二区三区| 蜜臀a∨国产成人精品| 国产欧美91| 亚洲一区二区伦理| 在线亚洲高清视频| 欧美精品二区三区四区免费看视频| 欧美影院午夜播放| 国产精品日韩久久久| 99亚洲一区二区| 一本色道久久88亚洲综合88 | 一本一本久久a久久精品综合麻豆| 极品尤物久久久av免费看| 亚洲一区二区三区午夜| 亚洲视频图片小说| 欧美日韩一区成人| 亚洲黄一区二区三区| 亚洲高清在线观看一区| 久久全球大尺度高清视频| 久久久久久香蕉网| 国产一区二区三区在线观看网站 | 老司机免费视频久久| 国产在线欧美日韩| 久久国产精品亚洲va麻豆| 欧美一区二区日韩一区二区| 国产精品日韩久久久| 亚洲一区二区影院| 欧美综合国产| 狠狠久久亚洲欧美| 久久久久免费视频| 亚洲福利视频网站| 一本久久综合亚洲鲁鲁五月天| 欧美日韩国产小视频| 一区二区三区视频在线| 亚洲欧美日韩国产综合精品二区| 国产精品美女一区二区在线观看| 亚洲欧美国产制服动漫| 久久久亚洲午夜电影| 在线观看精品| 欧美日本精品一区二区三区| 日韩亚洲成人av在线| 羞羞色国产精品| 黄色成人精品网站| 欧美精品1区2区| 亚洲一区二区三区四区视频 | 亚洲精品一品区二品区三品区| 欧美激情一区二区| 亚洲视频你懂的| 另类专区欧美制服同性| 亚洲乱码久久| 欧美一级淫片播放口| 国产综合在线视频| 欧美不卡福利| 亚洲视频在线观看| 免费在线成人av| 欧美精品偷拍| 99re6这里只有精品| 欧美一进一出视频| 最近中文字幕日韩精品| 亚洲第一色中文字幕| 亚洲第一在线综合网站| 亚洲国产二区| 亚洲茄子视频| 日韩午夜免费| 一区二区高清| 夜夜嗨一区二区| 亚洲综合日韩| 亚洲欧美日产图| 欧美在线黄色| 久久久久久久综合色一本| 久久久www成人免费毛片麻豆 | 一区二区三区福利| 一区二区三区欧美亚洲| 亚洲午夜视频在线| 午夜精品美女自拍福到在线| 欧美影院在线| 久久久综合视频| 欧美/亚洲一区| 亚洲国产精品ⅴa在线观看| 最新国产拍偷乱拍精品| 日韩一级视频免费观看在线| 一区二区三区精品国产| 午夜精品亚洲一区二区三区嫩草| 亚洲男人的天堂在线| 欧美影视一区| 欧美成人一区二免费视频软件| 欧美日韩不卡| 国产欧美日韩精品专区| 亚洲高清久久网| 中文在线不卡| 久久一区二区三区国产精品| 亚洲第一精品电影| 中文网丁香综合网| 久久久久久久久久久久久女国产乱| 免费精品视频| 国产精品中文字幕欧美| 亚洲电影中文字幕| 亚洲愉拍自拍另类高清精品| 久久男人资源视频| 亚洲精品美女在线观看播放| 亚洲永久精品大片| 欧美3dxxxxhd| 国产日韩一区二区| 亚洲精选视频在线| 久久精品国产精品亚洲| 亚洲肉体裸体xxxx137| 欧美一区二区三区精品电影| 欧美激情成人在线视频| 国产香蕉久久精品综合网| 亚洲精品一区二区三| 久久精品日韩| 一本一道久久综合狠狠老精东影业 | 欧美伊久线香蕉线新在线| 欧美成人蜜桃| 午夜久久一区| 欧美日韩精品一区二区| 精品9999| 欧美在线视频播放| 夜色激情一区二区| 欧美成在线观看| 国产一区观看| 亚洲欧美制服另类日韩| 亚洲日本电影| 玖玖视频精品| 黑人中文字幕一区二区三区 | 久久久久在线| 亚洲一区日韩| 欧美日韩一区二区在线播放| 亚洲国产精品久久91精品| 久久精品国产清自在天天线| 亚洲色图自拍| 欧美精品自拍| 亚洲娇小video精品| 久久一本综合频道| 午夜欧美精品久久久久久久| 国产精品成人aaaaa网站| 99国产麻豆精品| 欧美华人在线视频| 久久综合中文| 亚洲电影网站| 欧美不卡一区| 免费毛片一区二区三区久久久| 黑人操亚洲美女惩罚| 久久久久久久久岛国免费| 欧美亚洲一区二区在线| 国产区在线观看成人精品| 午夜日韩在线观看| 亚洲一区二区久久| 国产精品永久免费视频| 香蕉国产精品偷在线观看不卡| 亚洲一二三区精品| 国产精品一二一区| 性欧美超级视频| 欧美一级免费视频| 一区三区视频| 亚洲高清不卡一区| 欧美激情精品久久久久久久变态| 一本大道久久a久久综合婷婷| 亚洲狼人综合| 国产精品丝袜91|