凤之焚的专栏

业与情的纠缠,死而复生的蜕变

用户操作
[即时聊天] [发私信] [加为好友]
凤之焚ID:lion_wing
37581次访问,排名3192,好友2人,关注者4人。
lion_wing的文章
原创 40 篇
翻译 0 篇
转载 18 篇
评论 44 篇
凤之焚的公告

<<傻子才悲伤>>

最近评论
scribbler:如果Iframe中包含JavaScript调用,
hr=pWindow2->get_document(&pDoc2Frame);
pDoc2Frame为空
controstr:我在调式的时候函数CHTMLFilter::ReportData()处
hr = UrlMonProtocol->Read(p, sizeof(p)-1, &Readtotal);有问题。出现异常,程序运行到这里IE就死了
controstr:我在调式的时候函数CHTMLFilter::ReportData()处
hr = UrlMonProtocol->Read(p, sizeof(p)-1, &Readtotal);有问题。出现异常,程序运行到这里IE就死了
controstr:我在调式的时候函数CHTMLFilter::ReportData()处
hr = UrlMonProtocol->Read(p, sizeof(p)-1, &Readtotal);有问题。出现异常,程序运行到这里IE就死了
lauer0246:文章不错,收藏一下!
文章分类
收藏
相册
BLOG收藏
"廉大师"的BLOG(RSS)
《程序员》(RSS)
ACE(1)(RSS)
ACE(2)(RSS)
ATL/COM
jelink的专栏(ASP.net)(RSS)
rageliu的专栏(视频采集)(RSS)
凤之焚的博客(RSS)
土豆编码的专栏(COM)(RSS)
雷音制作
开发相关
搜索引擎研究
收藏心情
学习收藏
个人管理
数据结构
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 ATL学习实践(VC8)-用CWindowImpl实现窗口收藏

新一篇: 做个有责任心的男人 | 旧一篇: VS2005下安装WTL8.0

用CWindowImpl实现窗口

一、新建工程。在VC8创建一个ATL Project工程。名称为ATL_Test,,Server Type为Executable(EXE),完成。 

二、新建窗口类。添加一个C++类,做为窗口类。向导中填写类名CMyWindow,基类CWindowImpl<CMyWindow>,OK。

在stdafx.h中包含头文件:#include <atlwin.h>

生成代码如下:

//version 1.0.0.0

MyWindow.h

#pragma once

class CMyWindow :
 public CWindowImpl<CMyWindow>
{
public:
 CMyWindow(void);
public:
 ~CMyWindow(void);
};

MyWindow.cpp

#include "StdAfx.h"
#include "MyWindow.h"

CMyWindow::CMyWindow(void)
{
}

CMyWindow::~CMyWindow(void)
{
}

三、修改类名、添加消息处理

修改类名:DECLARE_WND_CLASS(_T("MyName"))

添加消息处理映射:

BEGIN_MSG_MAP(CMyWindow)
 MESSAGE_HANDLER(WM_PAINT, OnPaint)
 MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
END_MSG_MAP()

添加消息处理函数:

LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

代码如下:

//version 1.0.0.1

MyWindow.h

#pragma once

class CMyWindow :
 public CWindowImpl<CMyWindow>
{
public:
   // 窗口类名
   DECLARE_WND_CLASS(_T("MyName"))
  //消息映射
   BEGIN_MSG_MAP(CMyWindow)
      MESSAGE_HANDLER(WM_CREATE, OnCreate)
      MESSAGE_HANDLER(WM_PAINT, OnPaint)
      MESSAGE_HANDLER(WM_DESTROY, OnDestroy)   END_MSG_MAP()
   //消息处理
   LRESULT OnCreate(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
   LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
   LRESULT OnDestroy(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);

public:
 CMyWindow(void);
public:
 ~CMyWindow(void);
};

MyWindow.cpp

#include "StdAfx.h"
#include "MyWindow.h"

CMyWindow::CMyWindow(void)
{
}

CMyWindow::~CMyWindow(void)
{
}

LRESULT CMyWindow::OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
 PAINTSTRUCT ps;
    HDC hDC = GetDC();
    BeginPaint( &ps );
    TextOut( hDC, 0, 0, _T("Hello world"), 11 );
    EndPaint( &ps );
    return 0;
}
LRESULT CMyWindow::OnDestroy(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
 PostQuitMessage( 0 );
    return 0;
}

四、创建ATL窗口。

在ATL_Test.cpp的代码如下:

#include "stdafx.h"
#include "resource.h"
#include "ATL_Test.h"
#include "atlapp.h"
#include "MyWindow.h"

class CATL_TestModule : public CAtlExeModuleT< CATL_TestModule >
{
public :
 DECLARE_LIBID(LIBID_ATL_TestLib)
 DECLARE_REGISTRY_APPID_RESOURCEID(IDR_ATL_TEST, "{8ACB70F9-164D-4A7D-9D2B-477208567C28}")
};

CATL_TestModule _AtlModule;

 

//
extern "C" int WINAPI _tWinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,
                                LPTSTR /*lpCmdLine*/, int nShowCmd)
{
 CMyWindow Window;
 Window.Create( NULL, CWindow::rcDefault, _T("Hello"),WS_OVERLAPPEDWINDOW );
 Window.ShowWindow(nShowCmd);
 Window.UpdateWindow();
    MSG msg;
    while( GetMessage( &msg, NULL, 0, 0 ) )
 {
      TranslateMessage( &msg );
      DispatchMessage( &msg );
    }
    return _AtlModule.WinMain(nShowCmd);
}

 

发表于 @ 2008年04月09日 11:54:00|评论(loading...)|收藏

新一篇: 做个有责任心的男人 | 旧一篇: VS2005下安装WTL8.0

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 凤之焚