• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 求救:atl的gui

求救:atl的gui

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atl34砂轮,atl方形动力电池,atl80.dll官方下载,atl71.dll一键修复,atl等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 求救:atl的gui
描述:

#include <windows.h>
class ZWindow;
ZWindow* g_pWnd = NULL;
#pragma pack(push,1)
struct _WndProcThunk
{
    DWORD   m_mov;    // mov dword ptr [esp+0x4], pThis (esp+0x4 is hWnd)
    DWORD   m_this;
    BYTE    m_jmp;    // jmp WndProc
    DWORD   m_relproc;    // 相对jmp
};
#pragma pack(pop)
//typedef void(*WNDPROC)();
class ZWindow
{
public:
    HWND m_hWnd;
    _WndProcThunk thunk;
    //ZWindow(HWND hWnd = 0) : m_hWnd(hWnd) { }
void Init(WNDPROC proc, void* pThis)
{
    thunk.m_mov = 0x042444C7;  //C7 44 24 04
    thunk.m_this = (DWORD)pThis;
    thunk.m_jmp = 0xe9;
    thunk.m_relproc = (int)proc - ((int)this+sizeof(_WndProcThunk));
    FlushInstructionCache(GetCurrentProcess(), &thunk, sizeof(thunk));
}
     
    inline BOOL ShowWindow(int nCmdShow)
    { return ::ShowWindow(m_hWnd, nCmdShow); }
    inline BOOL UpdateWindow()
    {  return ::UpdateWindow(m_hWnd); }
    inline HDC BeginPaint(LPPAINTSTRUCT ps)
    {  return ::BeginPaint(m_hWnd, ps); }
    inline BOOL EndPaint(LPPAINTSTRUCT ps)
    {  return ::EndPaint(m_hWnd, ps); }
inline BOOL GetClientRect(LPRECT rect)
    {  return ::GetClientRect(m_hWnd, rect); }
    
    BOOL Create(LPCTSTR szClassName, LPCTSTR szTitle, HINSTANCE hInstance, 
                HWND hWndParent = 0, DWORD dwStyle = WS_OVERLAPPEDWINDOW, 
                DWORD dwExStyle = 0, HMENU hMenu = 0, int x = CW_USEDEFAULT, 
                int y = CW_USEDEFAULT, int nWidth = CW_USEDEFAULT, 
                int nHeight = CW_USEDEFAULT)
    {
        m_hWnd = ::CreateWindowEx(dwExStyle, szClassName, szTitle, dwStyle, 
                                   x, y, nWidth, nHeight, hWndParent, hMenu, 
                                   hInstance, NULL);
        return m_hWnd != NULL;
    }
    virtual LRESULT OnPaint(WPARAM wParam, LPARAM lParam)
    {
        HDC hDC;
        PAINTSTRUCT ps;
        RECT rect;
        hDC = BeginPaint(&ps);
        GetClientRect(&rect);
        ::DrawText(hDC, "Hello world", -1, &rect, 
                   DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        EndPaint(&ps);
        return 0;
    }
    virtual LRESULT OnLButtonDown(WPARAM wParam, LPARAM lParam)
    {
        return 0;
    }
    virtual LRESULT OnCreate(WPARAM wParam, LPARAM lParam)
    {
        return 0;
    }
    virtual LRESULT OnKeyDown(WPARAM wParam, LPARAM lParam)
    {
        return 0;
    }
    static LRESULT CALLBACK StartWndProc(HWND hWnd, UINT uMsg, 
                                          WPARAM wParam, LPARAM lParam)
    {
        ZWindow* pThis = g_pWnd ;
pThis->m_hWnd = hWnd;
pThis->Init(WindowProc, pThis);
WNDPROC pProc = (WNDPROC)&(pThis->thunk);
WNDPROC pOldProc = (WNDPROC)::SetWindowLong(hWnd, GWL_WNDPROC, (LONG)pProc);
return pProc(hWnd, uMsg, wParam, lParam);
    }
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, 
                                   WPARAM wParam, LPARAM lParam)
{
    ZWindow* pThis = (ZWindow*)hWnd;
    pThis->ProcessWindowMessage(pThis->m_hWnd, uMsg, wParam, lParam) ;     
    return 0;
}
 
BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, 
                                   WPARAM wParam, LPARAM lParam)
{  
      

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ATL怎么实现可变参数的接口?
  • 怎样用ATL写一个含有其它组件的进程外COM
  • ATL7中加入socket的头文件编译出错
  • 在ATL工程MFC窗口调用Create失败(注:我的ATL工程支持MFC)
  • ATL正则表达式验证遇到中文出现异常!
  • 关于ATL做复合控件的问题
  • [讨论]ATL中的文本字符串,我该定义为什么类型
  • ATL开发指南第2版为什么所有的书店都没有卖的?电子版也没有
  • 大家一般都怎么打包Atl开发的ActiveX控件?
  • 求ATL解决方案

相关文章

  • 2017-06-05 为什么自己写的ActiveX控件属性能修改但在最终程序里没作用
  • 2017-06-05 SuspendThread,Sleep函数使线程处于什么状态?
  • 2017-06-05 WebBrowser的PostData和Header问题
  • 2017-06-04 mfc串口接收数据显示自动回复问题
  • 2017-06-04 怎么在VC里调试Shell
  • 2017-06-04 请高手指教一个错误
  • 2017-06-04 我知道这里高手如云,呵呵,各位有没有办法获取左面上所有元素的系统图标呢?
  • 2017-06-04 如何生成ocx
  • 2017-06-05 您的程序需要加壳吗?请联系我
  • 2017-06-05 服务和窗口的问题

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于线程的暂停和终止的问题
    • 请问在两个程序之间如何通信?
    • vc读取word表格
    • ShellExecute执行程序,如何返回消息给调用窗口
    • 一个VC毕业设计的问题
    • 如何在ATL中使用WindowsMediaPlayerSDK播放流媒体(声音,无图像)?
    • mfcmapx50219访问地图数据造成非法访问
    • IEplugin
    • 默认打印机已设置成横向打印,调用excel打印时,让range对象调用PrintOut方法时显示打印预览,此时Excel打印预览中的打印为纵向打印,查
    • 终于弄到了半条命的源代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有