zoukankan      html  css  js  c++  java
  • 封装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& cs
    124     )
    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 }
    复制代码
  • 相关阅读:
    Android混淆代码的方法
    Android开发如何在4.0及以上系统中自定义TitleBar
    设置按钮的selector
    MD5加密(Android里和Java SE里是一样的)
    Android中图片实现按钮点击效果
    Handler消息传递机制
    ContentProvider的使用
    操作Sqlite数据库
    使用Pull解析器读取XML文件
    Android添加事件的四种方法
  • 原文地址:https://www.cnblogs.com/yzl050819/p/4586018.html
Copyright © 2011-2022 走看看