首页 > 代码库 > 仿写MFC,自己写的封装sdk API 应用
仿写MFC,自己写的封装sdk API 应用
仿写MFC,自己写的封装sdk API 应用
1 #include "QWinApp.h" 2 #include "QGlobal.h" 3 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) 4 { 5 QWinApp* pWinApp = GlbGetApp(); 6 //new QWinApp; 7 //pWinApp = GlbGetApp(); 8 assert(pWinApp); 9 pWinApp->hInst = hInstance;10 pWinApp->InitInstance();11 pWinApp->Run();12 pWinApp->ExitInstance();13 14 return TRUE;15 }
1 #pragma once 2 #include <windows.h> 3 class QWnd 4 { 5 public: 6 QWnd(void); 7 ~QWnd(void); 8 public: 9 HWND m_hWnd;10 virtual BOOL PreCreateWindow(CREATESTRUCT& cs);11 12 virtual BOOL CreateEx(DWORD dwExStyle,LPCTSTR lpszClassName,LPCTSTR lpszWindowName, DWORD dwStyle,13 int x,int y,int nWidth, int nHeight,HWND hWndParent,HMENU nIDorHMenu,LPVOID lpParam = NULL);14 public:15 WNDPROC m_lpfnOldWndProc;16 BOOL ShowWindow(int nCmdShow);17 BOOL UpdateWindow();18 BOOL DestroyWindow();19 public:20 virtual LRESULT OnClose(WPARAM wParam,LPARAM lParam);21 virtual LRESULT OnDestroy(WPARAM wParam,LPARAM lParam);22 virtual LRESULT OnCreate(WPARAM wParam,LPARAM lParam);23 public:24 static LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);25 virtual LRESULT WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam);26 virtual LRESULT Default(UINT uMsg, WPARAM wParam, LPARAM lParam);27 BOOL SubClassWindows(HWND hWnd);28 static QWnd* FromHandle(HWND hWnd);29 };
1 #include "QWnd.h" 2 LRESULT CALLBACK QWnd::WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 3 { 4 if (uMsg == WM_CREATE || uMsg == WM_NCCREATE) 5 { 6 CREATESTRUCT* pCs = (CREATESTRUCT*)lParam; 7 if (pCs) 8 { 9 QWnd* pWnd = (QWnd*)pCs->lpCreateParams; 10 if (pWnd) 11 { 12 pWnd->m_hWnd = hwnd; 13 pWnd->m_lpfnOldWndProc = (WNDPROC)GetWindowLong(hwnd,GWL_WNDPROC); 14 return pWnd->WindowProc(uMsg,wParam,lParam); 15 } 16 } 17 } 18 QWnd* pWnd = (QWnd*)GetWindowLong(hwnd,GWL_USERDATA); 19 if (pWnd) 20 { 21 return pWnd->WindowProc(uMsg,wParam,lParam); 22 } 23 24 return DefWindowProc(hwnd, uMsg, wParam, lParam); 25 } 26 LRESULT QWnd::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam) 27 { 28 switch (uMsg) 29 { 30 case WM_CLOSE: 31 { 32 return OnClose(wParam,lParam); 33 } 34 break; 35 case WM_DESTROY: 36 { 37 return OnDestroy(wParam,lParam); 38 } 39 case WM_CREATE: 40 { 41 return OnCreate(wParam,lParam); 42 } 43 break; 44 } 45 return Default(uMsg, wParam, lParam); 46 } 47 LRESULT QWnd::Default(UINT uMsg, WPARAM wParam, LPARAM lParam) 48 { 49 if (m_lpfnOldWndProc == QWnd::WndProc) 50 { 51 return ::DefWindowProc(m_hWnd,uMsg, wParam, lParam); 52 } 53 return m_lpfnOldWndProc(m_hWnd,uMsg, wParam, lParam); 54 } 55 LRESULT QWnd::OnClose(WPARAM wParam,LPARAM lParam) 56 { 57 return Default(WM_CLOSE,wParam,lParam); 58 } 59 LRESULT QWnd::OnCreate(WPARAM wParam,LPARAM lParam) 60 { 61 return Default(WM_CREATE,wParam,lParam); 62 } 63 64 LRESULT QWnd::OnDestroy(WPARAM wParam,LPARAM lParam) 65 { 66 return Default(WM_DESTROY,wParam,lParam); 67 } 68 QWnd::QWnd(void) 69 { 70 m_hWnd =NULL; 71 m_lpfnOldWndProc = NULL; 72 } 73 74 QWnd::~QWnd(void) 75 { 76 } 77 BOOL QWnd::CreateEx( DWORD dwExStyle, LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, 78 int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU nIDorHMenu, LPVOID lpParam ) 79 { 80 CREATESTRUCT cs; 81 cs.lpCreateParams = lpParam; 82 cs.hInstance = (HINSTANCE)GetModuleHandle(NULL); 83 cs.hMenu = nIDorHMenu; 84 cs.hwndParent = hWndParent; 85 cs.cy = nWidth; 86 cs.cx = nHeight; 87 cs.y = y; 88 cs.x = x; 89 cs.style = dwStyle; 90 cs.lpszName = lpszWindowName; 91 cs.lpszClass = lpszClassName; 92 cs.dwExStyle = dwExStyle; 93 BOOL bRet = PreCreateWindow(cs); 94 if (!bRet) 95 { 96 return FALSE; 97 } 98 HWND hWnd = CreateWindowEx(cs.dwExStyle,cs.lpszClass,cs.lpszName, 99 cs.style,cs.x,cs.y,cs.cx,cs.cy,cs.hwndParent,cs.hMenu,100 cs.hInstance,this);101 if (NULL == hWnd)102 {103 return FALSE;104 }105 m_hWnd =hWnd;106 SetWindowLong(m_hWnd,GWL_USERDATA,(LONG) this);107 m_lpfnOldWndProc = (WNDPROC) GetWindowLong(m_hWnd,GWL_WNDPROC);108 if (m_lpfnOldWndProc == QWnd::WndProc)109 {110 //子类化111 SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)QWnd::WndProc);112 WindowProc(WM_CREATE,0,0);113 WindowProc(WM_NCCREATE,0,0);114 }115 return TRUE;116 }117 QWnd* FromHandle(HWND hWnd)118 {119 QWnd* pWnd =(QWnd*)GetWindowLong(hWnd,GWL_USERDATA);120 return pWnd;121 }122 BOOL QWnd::PreCreateWindow(123 CREATESTRUCT& cs124 )125 {126 //HINSTANCE hInst = (HINSTANCE)GetModuleHandle(NULL);127 //assert(hInst);128 WNDCLASSEX wc = {0};129 BOOL bRet = GetClassInfoEx(cs.hInstance,cs.lpszClass,&wc);130 if (bRet)131 {132 return TRUE;133 }134 //WNDCLASSEX wc = {0};135 wc.cbClsExtra = 0;136 wc.cbSize = sizeof(wc);137 wc.cbWndExtra = 0;138 wc.hbrBackground = (HBRUSH)GetStockObject(COLOR_HIGHLIGHTTEXT);139 wc.hCursor = LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW));140 wc.hIcon = LoadIcon(NULL, MAKEINTRESOURCE(IDI_APPLICATION));141 wc.hIconSm = NULL;142 wc.hInstance = cs.hInstance;143 wc.lpfnWndProc = WndProc;144 wc.lpszClassName = cs.lpszClass;145 wc.lpszMenuName = NULL;146 wc.style = CS_HREDRAW | CS_VREDRAW;147 BOOL bRetClass = RegisterClassEx(&wc);148 if(!bRetClass)149 {150 //MessageBox(NULL, L"Register Class Failed!", NULL, MB_OK);151 return FALSE;152 }153 return TRUE;154 }155 156 BOOL QWnd::ShowWindow(int nCmdShow)157 {158 return ::ShowWindow(m_hWnd,nCmdShow);159 }160 BOOL QWnd::UpdateWindow()161 162 {163 return ::UpdateWindow(m_hWnd);164 }165 166 BOOL QWnd::DestroyWindow()167 168 {169 return ::DestroyWindow(m_hWnd);170 }171 172 BOOL QWnd::SubClassWindows(HWND hWnd)173 {174 if (m_hWnd == hWnd) return TRUE;175 m_lpfnOldWndProc = (WNDPROC)GetWindowLong(hWnd,GWL_WNDPROC);176 if(m_lpfnOldWndProc!=QWnd::WndProc)177 {178 m_hWnd =hWnd;179 SetWindowLong(m_hWnd,GWL_USERDATA,(LONG)this);180 SetWindowLong(m_hWnd,GWL_WNDPROC,(LONG)QWnd::WndProc);181 return TRUE;182 }183 return FALSE;184 }
http://pan.baidu.com/s/1eQjCWH8
仿写MFC,自己写的封装sdk API 应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。