2012年3月11日 星期日

[VC(Visual C++) ]- SDI透明加不規則視窗

[VC(Visual C++) ]- SDI透明加不規則視窗



本篇分享SDI透明加不規則視窗範例程式,有興趣的(C/P)同好,歡迎來http://filemarkets.com/file/jashliao/1b3ad6ae/索取,因為我不會上傳檔案分享哈哈 ^ ^












主要程式碼



001    // MainFrm.cpp : implementation of the CMainFrame class        

002    //        

003            

004    #include "stdafx.h"        

005    #include "testRect.h"        

006            

007    #include "MainFrm.h"        

008            

009    #ifdef _DEBUG        

010    #definenew DEBUG_NEW        

011    #undef THIS_FILE        

012    staticchar THIS_FILE[] = __FILE__;        

013    #endif        

014            

015    /////////////////////////////////////////////////////////////////////////////        

016    // CMainFrame        

017            

018    IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)        

019            

020    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)        

021        //{{AFX_MSG_MAP(CMainFrame)    

022        ON_WM_CREATE()    

023        ON_WM_SIZE()    

024        //}}AFX_MSG_MAP    

025    END_MESSAGE_MAP()        

026            

027    static UINT indicators[] =        

028    {        

029        ID_SEPARATOR,           // status line indicator    

030        ID_INDICATOR_CAPS,    

031        ID_INDICATOR_NUM,    

032        ID_INDICATOR_SCRL,    

033    };        

034            

035    /////////////////////////////////////////////////////////////////////////////        

036    // CMainFrame construction/destruction        

037            

038    CMainFrame::CMainFrame()        

039    {        

040        // TODO: add member initialization code here    

041            

042    }        

043            

044    CMainFrame::~CMainFrame()        

045    {        

046    }        

047            

048    int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)        

049    {        

050        if (CFrameWnd::OnCreate(lpCreateStruct) == -1)    

051            return -1;

052    ////////////////////////////////        

053    //掛載TOOLBAR和狀態列        

054    /*        

055        if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP    

056            | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

057            !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

058        {    

059            TRACE0("Failed to create toolbar\n");

060            return -1;      // fail to create

061        }    

062            

063        {    

064        if (!m_wndStatusBar.Create(this) ||    

065            !m_wndStatusBar.SetIndicators(indicators,

066              sizeof(indicators)/sizeof(UINT)))

067            TRACE0("Failed to create status bar\n");

068            return -1;      // fail to create

069        }    

070            

071        // TODO: Delete these three lines if you don't want the toolbar to    

072        //  be dockable    

073            

074        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);    

075        EnableDocking(CBRS_ALIGN_ANY);    

076        DockControlBar(&m_wndToolBar);    

077    //*/        

078    //////////////////////////////////////////////////////        

079    /////////////////////////////////////////////////////        

080        this->SetMenu(NULL);//隱藏菜單    

081        this->DrawMenuBar();//重繪菜單    

082    /////////////////////////////////////////////////////        

083    ///*        

084    ///////////////////////////////////        

085        long style=GetWindowLong(m_hWnd,GWL_STYLE);    

086        //style&=~WS_SYSMENU;//去除系統按鈕    

087        style&=~WS_CAPTION;//去除標題列    

088        SetWindowLong(m_hWnd,GWL_STYLE,style);    

089    ////////////////////////////////////        

090    //*/        

091    ///*        

092    ///////////////////        

093        /////變成橢圓    

094        CRect rcDialog;    

095        GetClientRect (rcDialog );    

096        m_rgn.CreateEllipticRgn (0,0,rcDialog.Width(),rcDialog.Height());    

097        ::SetWindowRgn(GetSafeHwnd(),(HRGN)m_rgn,TRUE);    

098    /////////////////////        

099    //*/        

100    ////////////////////////////////////        

101        ///* //透明程式碼    

102        SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,    

103            GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);

104        HINSTANCE hInst = LoadLibrary("User32.DLL");     

105        if(hInst)     

106        {     

107            typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD); 

108            MYFUNC fun = NULL;

109            fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");

110            if(fun)fun(this->GetSafeHwnd(),0,200,2); 

111            FreeLibrary(hInst); 

112        }    

113        //*/    

114    //////////////////////////////////////        

115        return 0;    

116    }        

117            

118    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)        

119    {        

120        if( !CFrameWnd::PreCreateWindow(cs) )    

121            return FALSE;

122        // TODO: Modify the Window class or styles here by modifying    

123        //  the CREATESTRUCT cs    

124            

125        return TRUE;    

126    }        

127            

128    /////////////////////////////////////////////////////////////////////////////        

129    // CMainFrame diagnostics        

130            

131    #ifdef _DEBUG        

132    void CMainFrame::AssertValid() const        

133    {        

134        CFrameWnd::AssertValid();    

135    }        

136            

137    void CMainFrame::Dump(CDumpContext& dc) const        

138    {        

139        CFrameWnd::Dump(dc);    

140    }        

141            

142    #endif//_DEBUG        

143            

144    /////////////////////////////////////////////////////////////////////////////        

145    // CMainFrame message handlers        

146            

147            

148    void CMainFrame::OnSize(UINT nType, int cx, int cy)         

149    {        

150        CFrameWnd::OnSize(nType, cx, cy);    

151            

152        // TODO: Add your message handler code here    

153            /////變成橢圓

154            

155    }        

 



 


沒有留言:

張貼留言