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

l

成都手游碼農一枚
隨筆 - 32, 文章 - 0, 評論 - 117, 引用 - 0
數據加載中……

windows動畫窗體。

同往常一樣,先放一章效果圖,這鴨子是會飛的哦。



效果類似常見的QQ寵物、360精靈之類的。

不說廢話了,還是說重點。

==================================================
   要實現這種效果,我的第一想法便是通過SetWindowRGN設置不規則窗體,然后更新。
顯然,這樣是最容易想到的,但是也不由的有點擔心效率,最終我也通過這種方式,實現了一個,
正如擔心的一樣,每秒6幀的速度偶爾會出現閃爍(當然我的本本可能不是很給力- -。)。
   這種方式就是通過載入的位圖,獲取每個像素點,并生成相應的HRGN,每幀動畫一個。
然后通過計時器切換,由于效果不是很好,在此就不貼代碼了。

   既然不能通過SetWindowRGN,那還能怎么做呢?其實windows自身已經給了我們一個
處理這種位圖窗口的API,而且還可以實現透明,一說到透明很多人都應該知道是那個API了。

Syntax

BOOL SetLayeredWindowAttributes(          HWND hwnd,
    COLORREF crKey,
    BYTE bAlpha,
    DWORD dwFlags
);
Parameters

hwnd
[
in] Handle to the layered window. A layered window is created by specifying WS_EX_LAYERED when creating the window with the CreateWindowEx function or by setting WS_EX_LAYERED via SetWindowLong after the window has been created.
crKey
[
in] COLORREF structure that specifies the transparency color key to be used when composing the layered window. All pixels painted by the window in this color will be transparent. To generate a COLORREF, use the RGB macro.
bAlpha
[
in] Alpha value used to describe the opacity of the layered window. Similar to the SourceConstantAlpha member of the BLENDFUNCTION structure. When bAlpha is 0, the window is completely transparent. When bAlpha is 255, the window is opaque.
dwFlags
[
in] Specifies an action to take. This parameter can be one or more of the following values.
LWA_COLORKEY
Use crKey 
as the transparency color.
LWA_ALPHA
Use bAlpha to determine the opacity of the layered window.
Return Value

If the function succeeds, the 
return value is nonzero. 
If the function fails, the 
return value is zero. To get extended error information, call GetLastError.


其實這個函數在以前也經常用到,但主要是用它來實現透明,根本沒想到它還可以實現不規則窗體。
看了MSDN你應該知道了吧,其實通過設置第二個顏色屬性便可過濾掉窗體中指定的某種顏色,達到
不規則窗體的效果。

設置透明色的代碼如下:再此將白色設置為透明。

HINSTANCE hInstance=(HINSTANCE)LoadLibrary("user32.dll");
        
if (hInstance)
        
{
            typedef BOOL(WINAPI 
*pFun)(HWND,COLORREF,BYTE,DWORD);     
            pFun  fun  
=  NULL;       
            fun
=(pFun)GetProcAddress(hInstance, "SetLayeredWindowAttributes");   
            SetWindowLong(GWL_EXSTYLE, GetWindowLong(GWL_EXSTYLE) 
| 0x80000);
            
if (fun)
            
{
                fun(hWnd, RGB(
255255255), 00x1);
            }

            FreeLibrary(hInstance);
        }

知道如何處理不規則窗體后剩下的就簡單了,在此我用的一半游戲中的(4*4)行走圖做的。
只需要在繪制的時候通過改變繪制區域坐標來控制顯示的位置達到動畫的效果。
其中m_nX,m_nY分別是橫向幀數 和 豎向的幀數 在此為 4 * 4

void OnPaint(CDCHandle /*dc*/)
    
{
        CPaintDC dc(
*this);
        CDC bmpDC;
        CBitmapHandle bmpOld;
        CRect rtClient;

        GetClientRect(
&rtClient);
        
        bmpDC.CreateCompatibleDC(dc);
        bmpOld 
= bmpDC.SelectBitmap(m_bmpBox);

        
int nSubX = m_nWidth / m_nX;
        
int nSubY = m_nHeight / m_nY;

        dc.BitBlt(
00, nSubX, nSubY, bmpDC, m_nCurX * nSubX, 
            m_nCurY 
* nSubY, SRCCOPY);

        bmpDC.SelectBitmap(bmpOld);
    }

剩下就是一些輔助的功能了:m_nCurX m_nCurY 分別只是當前橫向第幾幀 和 縱向的第幾幀

 /**
     * 實現移動窗口
     
*/

    UINT OnNcHitTest(CPoint point)
    
{
        
return HTCAPTION;
    }


    
/**
     * 更新動畫
     
*/

    
void OnTimer(UINT_PTR nIDEvent)
    
{
        
if (nIDEvent == ANIMA_TIMER)
        
{
            m_nCurX 
= (++m_nCurX) % m_nX;
            RedrawWindow();
        }

    }


    
/**
     * 改變方向
     
*/

    
void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
    
{
        
switch (nChar)
        
{
        
case VK_LEFT: m_nCurY = 1break;
        
case VK_RIGHT: m_nCurY = 2break;
        
case VK_UP: m_nCurY = 3break;
        
case VK_DOWN: m_nCurY = 0break;
        
case VK_ESCAPE:OnClose();break;
        }

    }


好了,結束,雖然沒啥技術含量,但也可以打發下無聊的時間。
以后有好玩的東西我也會更新在此。



posted on 2011-10-16 00:22 l1989 閱讀(3133) 評論(6)  編輯 收藏 引用 所屬分類: windows

評論

# re: windows動畫窗體。  回復  更多評論   

收藏。不過想要做出更復雜的窗口控制還是比較麻煩的。
2011-10-16 09:53 | 畢達哥拉斯半圓

# re: windows動畫窗體。  回復  更多評論   

不錯,感謝,收藏,原來qq寵物是這樣弄的啊,之前以為很神奇

# re: windows動畫窗體。  回復  更多評論   

@glueless human hair lace front wigs
QQ寵物和QQ秀,魔法表情全是Flash的
2011-10-16 17:25 | CzBiX

# re: windows動畫窗體。  回復  更多評論   

@CzBiX
這還真沒研究過~
其實除了窗體裁剪 動畫的實現很多方法,當然用flash也是一種。
2011-10-16 17:31 | azl

# re: windows動畫窗體。  回復  更多評論   

@glueless human hair lace front wigs
QQ寵物室flash,如果是一幀一個圖片按這種方法那要多少bmp啊
2011-10-17 09:49 | Skill

# re: windows動畫窗體。  回復  更多評論   

不錯 收藏了 以后關注你
2011-10-17 13:06 | 無賴熊貓
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产一区二区高清视频| 亚洲欧美一区二区在线观看| 欧美中文字幕在线| 国产亚洲欧美色| 久久久久一区二区三区| 欧美一区二区三区四区在线观看| 国产午夜精品久久久久久免费视 | 美日韩免费视频| 老司机午夜精品视频| 亚洲激情在线| 一本色道久久99精品综合| 国产精品区免费视频| 久久精品国产免费观看| 蜜桃久久精品乱码一区二区| 99在线视频精品| 亚洲综合色自拍一区| 精品51国产黑色丝袜高跟鞋| 欧美激情欧美狂野欧美精品| 欧美日韩在线观看一区二区三区| 亚洲一区精彩视频| 欧美综合二区| aa日韩免费精品视频一| 亚洲一区二区网站| 亚洲国语精品自产拍在线观看| 亚洲激情影院| 国产乱码精品一区二区三区av| 国产精品v亚洲精品v日韩精品| 欧美一级在线播放| 米奇777在线欧美播放| 午夜精品久久久久久久蜜桃app| 欧美中文字幕第一页| 9久re热视频在线精品| 欧美一级黄色网| 亚洲视频二区| 免费久久99精品国产自在现线| 亚洲手机在线| 免费日韩视频| 久久精品国产亚洲a| 欧美日韩另类一区| 男同欧美伦乱| 国产午夜久久久久| 中文高清一区| 一本综合久久| 蜜桃久久精品乱码一区二区| 久久精品日韩| 国产精品久久久久久户外露出| 欧美阿v一级看视频| 国产精品综合视频| 99视频超级精品| 麻豆精品视频在线| 久久免费视频这里只有精品| 欧美四级在线| 亚洲精品专区| 欧美国产日韩精品| 美女网站久久| 合欧美一区二区三区| 午夜精彩视频在线观看不卡 | 国模大胆一区二区三区| 亚洲深夜福利在线| 亚洲一区二区免费| 免费成人黄色av| 女女同性精品视频| 一区精品在线| 久久五月天婷婷| 久久久久天天天天| 精品白丝av| 久久噜噜亚洲综合| 可以看av的网站久久看| 国产在线观看91精品一区| 欧美一级片一区| 久久久久在线观看| 国内自拍视频一区二区三区| 欧美一级视频一区二区| 久久精品最新地址| 狠狠色噜噜狠狠狠狠色吗综合| 香港成人在线视频| 久久久久久噜噜噜久久久精品| 国产一区二区三区在线观看免费 | 欧美日韩免费一区二区三区| 亚洲第一在线综合网站| 最新高清无码专区| 欧美激情亚洲| 一区二区久久久久久| 亚洲欧美在线aaa| 国产一区二区0| 久久久久青草大香线综合精品| 久热re这里精品视频在线6| 在线精品一区| 欧美人与禽猛交乱配视频| 一本色道久久88综合日韩精品| 欧美一区成人| 在线播放亚洲一区| 欧美日韩另类在线| 欧美一区二区三区免费看 | 亚洲欧美中文另类| 很黄很黄激情成人| 欧美激情第六页| 中国女人久久久| 蜜臀av性久久久久蜜臀aⅴ| 99热这里只有成人精品国产| 国产精品区二区三区日本| 久久综合狠狠综合久久综合88| 亚洲国产成人在线播放| 亚洲欧美日韩国产成人| 一区在线免费| 国产精品高清免费在线观看| 久久精品一区二区| 夜夜狂射影院欧美极品| 久久久久久夜| 亚洲欧美日韩精品一区二区| 精品动漫一区| 国产精品久久久久久亚洲调教 | 老司机免费视频久久| 亚洲精品一区在线观看| 国产伦精品一区二区三区在线观看| 麻豆精品在线视频| 亚洲一区二区动漫| 91久久国产综合久久| 国产乱肥老妇国产一区二| 欧美激情自拍| 久久久久久久久久看片| 中文国产一区| 亚洲精品国精品久久99热一| 久久精品国产v日韩v亚洲| 亚洲网站啪啪| 亚洲高清成人| 国产亚洲一区在线| 国产精品九色蝌蚪自拍| 欧美激情综合网| 美女国产一区| 久久久久久久综合狠狠综合| 亚洲欧美国产精品va在线观看 | 亚洲欧洲在线视频| 国模私拍视频一区| 国产精品视频一区二区三区| 欧美精品日韩一区| 免费在线视频一区| 久久一日本道色综合久久| 午夜在线成人av| 亚洲欧美日韩视频二区| 亚洲视频一区在线观看| 日韩午夜激情电影| 亚洲免费久久| 夜夜狂射影院欧美极品| 亚洲久色影视| 亚洲精品在线一区二区| 亚洲国产精品日韩| 亚洲日本视频| 一本到高清视频免费精品| 亚洲乱码国产乱码精品精天堂 | 国产欧美日韩三级| 亚洲永久免费观看| 亚洲天堂av在线免费| 一本色道久久综合亚洲精品按摩| 亚洲人精品午夜| 日韩视频在线一区二区三区| 亚洲精品日韩精品| 亚洲人成人99网站| 中文国产成人精品久久一| 亚洲影院在线观看| 久久国产精品一区二区三区| 亚洲欧美在线另类| 久久久国产精品一区二区三区| 可以看av的网站久久看| 亚洲成人在线视频播放 | 亚洲欧美日韩一区二区| 午夜日韩电影| 久久午夜羞羞影院免费观看| 欧美成人精品三级在线观看| 亚洲高清在线观看一区| 99精品福利视频| 小嫩嫩精品导航| 久热re这里精品视频在线6| 欧美激情a∨在线视频播放| 亚洲国产精彩中文乱码av在线播放| 亚洲国产精品综合| 一区二区三区蜜桃网| 欧美一区2区视频在线观看| 久久久久久婷| 欧美视频一区二区三区四区| 国产精品一二三四| 午夜精品亚洲一区二区三区嫩草| 久久国产88| 欧美精品一区二区三| 国产精品一区二区三区四区| 亚洲第一精品影视| 亚洲性视频网址| 美女免费视频一区| 一区二区三区国产在线| 久久精品国产免费看久久精品 | 中国成人黄色视屏| 久久人人97超碰人人澡爱香蕉| 欧美激情一二三区| 国产视频一区免费看| 亚洲人成网站色ww在线| 欧美一区亚洲一区| 99re8这里有精品热视频免费 | 亚洲电影成人| 欧美一区二区久久久| 欧美性猛交xxxx免费看久久久|