[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 }
|
沒有留言:
張貼留言