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