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

[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    }        

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *