vc++ atl编程

一、

简单HelloWolrd:

#include <atlbase.h>
CComModule _Module;

int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
	_Module.Init( NULL, hInstance );
	MessageBox( NULL, _T("Hello, World!"), _T("Hello"), 0 );
	_Module.Term();
	return 0;
}

2、

#include <atlbase.h>
CComModule _Module;

int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
	_Module.Init( NULL, hInstance );
	_Module.m_hInstResource = LoadLibrary( _T("shell32.dll") );

	MSGBOXPARAMS mbp;
	ZeroMemory( &mbp, sizeof( mbp ) );
	mbp.cbSize       = sizeof( mbp );
	mbp.dwLanguageId = GetSystemDefaultLangID();
	mbp.dwStyle      = MB_USERICON;
	mbp.hInstance    = _Module.GetResourceInstance();
	mbp.lpszCaption  = _T("Hello");
	mbp.lpszIcon     = MAKEINTRESOURCE( 44 );
	mbp.lpszText     = _T("Hello, World!");
	MessageBoxIndirect( &mbp );

	FreeLibrary( _Module.m_hInstResource );
	_Module.m_hInstResource = NULL;
	_Module.Term();
	return 0;
}

3、

#include <windows.h>
#include <tchar.h>

LRESULT CALLBACK HelloWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
	switch ( uMsg )
	{
	case WM_DESTROY:
		{
			PostQuitMessage( 0 );
		}
		break;
	case WM_PAINT:
		{
			HDC hdc;
			PAINTSTRUCT ps;

			hdc = BeginPaint( hWnd, &ps );
			DrawText( hdc, _T("Hello, SDK!"), -1, &ps.rcPaint, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
			EndPaint( hWnd, &ps );
		}
		break;
	default:
		return DefWindowProc( hWnd, uMsg, wParam, lParam );
	}
	return 0;
}

BOOL InitApplication( HINSTANCE hInstance )
{
	WNDCLASS wc;
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
	wc.hCursor       = LoadCursor( NULL, IDC_ARROW );
	wc.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
	wc.hInstance     = hInstance;
	wc.lpfnWndProc   = HelloWndProc;
	wc.lpszClassName = _T("HelloSDK");
	wc.lpszMenuName  = NULL;
	wc.style         = CS_HREDRAW | CS_VREDRAW;

	return RegisterClass( &wc );
}

int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
	// 注册窗口类
	InitApplication( hInstance );

	// 创建窗口
	HWND hWnd = CreateWindow( _T("HelloSDK"), _T("Hello SDK"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
		CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL );
	ShowWindow( hWnd, nShowCmd );
	UpdateWindow( hWnd );

	// 消息循环
	MSG msg;
	while ( GetMessage( &msg, NULL, 0, 0 ) )
	{
		TranslateMessage( &msg );
		DispatchMessage( &msg );
	}

	return msg.wParam;
}

4、HelloATLWnd.h

#include <atlwin.h>

class CHelloATLWnd : public CWindowImpl< CHelloATLWnd, CWindow, CWinTraits< WS_OVERLAPPEDWINDOW > >
{
public:
	CHelloATLWnd()
	{
		CWndClassInfo& wci     = GetWndClassInfo();
		wci.m_bSystemCursor    = TRUE;
		wci.m_lpszCursorID     = IDC_ARROW;
		wci.m_wc.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
		wci.m_wc.hIcon         = LoadIcon( NULL, IDI_APPLICATION );
	}
public:
	DECLARE_WND_CLASS( _T("HelloATL") )
public:
	BEGIN_MSG_MAP( CHelloATLWnd )
		MESSAGE_HANDLER( WM_DESTROY, OnDestroy )
		MESSAGE_HANDLER( WM_PAINT, OnPaint )
	END_MSG_MAP()
public:
	LRESULT OnDestroy( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& hHandled )
	{
		::PostQuitMessage( 0 );
		return 0;
	}
	LRESULT OnPaint( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& hHandled )
	{
		HDC hdc;
		PAINTSTRUCT ps;

		hdc = BeginPaint( &ps );
		DrawText( hdc, _T("Hello, ATL!"), -1, &ps.rcPaint, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
		EndPaint( &ps );
		return 0;
	}
};

Main.cpp

#include <atlbase.h>
#include "HelloATLWnd.h"
CComModule _Module;

int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd )
{
	_Module.Init( NULL, hInstance );

	// 创建窗口
	CHelloATLWnd wnd;
	wnd.Create( NULL, CHelloATLWnd::rcDefault, _T("Hello ATL") );
	wnd.ShowWindow( nShowCmd );
	wnd.UpdateWindow();

	// 消息循环
	MSG msg;
	while ( GetMessage( &msg, NULL, 0, 0 ) )
	{
		TranslateMessage( &msg );
		DispatchMessage( &msg );
	}

	_Module.Term();
	return msg.wParam;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值