WIN32-ATL

  1 #include "stdafx.h"
  2 #include "ATLWinTest.h"
  3
  4 #define MAX_LOADSTRING 100
  5
  6 // 全局变量:
  7 /*HINSTANCE hInst;    */                            // 全局HINSTANCE接口
  8 TCHAR szTitle[MAX_LOADSTRING];                    // 窗口标题栏
  9 TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
 10
 11 //ATOM                MyRegisterClass(HINSTANCE hInstance);
 12 //BOOL                InitInstance(HINSTANCE, int);
 13 //LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
 14 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 15 CComModule _Module;
 16
 17 class CMainWindow : public CWindowImpl<CMainWindow>
 18 {
 19 public:
 20     CMainWindow()
 21     {
 22         CWndClassInfo& wci = GetWndClassInfo();
 23         if(!wci.m_atom)
 24         {
 25             wci.m_wc.hIcon = LoadIcon(_Module.GetResourceInstance(),
 26                     MAKEINTRESOURCE(IDI_ATLWINTEST));
 27             wci.m_wc.hIconSm=(HICON)::LoadImage(_Module.GetResourceInstance(),
 28                     MAKEINTRESOURCE(IDI_SMALL),
 29                     IMAGE_ICON,16,16,LR_DEFAULTCOLOR);
 30             wci.m_wc.hbrBackground=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,255));
 31             // 装载系统光标
 32             wci.m_bSystemCursor = TRUE;
 33             wci.m_lpszCursorID = IDC_CROSS;
 34         }
 35     }
 36     virtual BOOL ProcessWindowMessage(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT &lResult,DWORD dwMsgMapID)
 37     {
 38         BOOL bHandled = TRUE;
 39         switch(uMsg)
 40         {
 41             case WM_PAINT:
 42                 lResult = OnPaint();
 43                 break;
 44             case WM_DESTROY:
 45                 lResult = OnDestroy();
 46                 break;
 47             default:
 48                 bHandled = FALSE;
 49                 break;
 50         }
 51         return bHandled;
 52     }
 53 private:
 54     LRESULT OnPaint()
 55     {
 56         PAINTSTRUCT ps;
 57         HDC hdc = BeginPaint(&ps);
 58         RECT rect;
 59         GetClientRect(&rect);
 60         DrawText(hdc,_T("Hello,Windows"),-1,&rect,
 61         DT_CENTER|DT_VCENTER|DT_SINGLELINE);
 62         EndPaint(&ps);
 63         return 0;
 64     }
 65     LRESULT OnDestroy()
 66     {
 67         PostQuitMessage(0);
 68         return 0;
 69     }
 70 };
 71
 72 int APIENTRY _tWinMain(HINSTANCE hInstance,
 73                      HINSTANCE hPrevInstance,
 74                      LPTSTR    lpCmdLine,
 75                      int       nCmdShow)
 76 {
 77     _Module.Init(0,hInstance);
 78
 79     UNREFERENCED_PARAMETER(hPrevInstance);
 80     UNREFERENCED_PARAMETER(lpCmdLine);
 81
 82     MSG msg;
 83     HACCEL hAccelTable;
 84
 85     //// グローバル文字列を初期化しています。
 86     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
 87     LoadString(hInstance, IDC_ATLWINTEST, szWindowClass, MAX_LOADSTRING);
 88     //MyRegisterClass(hInstance);
 89
 90     // アプリケーションの初期化を実行します:
 91     //if (!InitInstance (hInstance, nCmdShow))
 92     //{
 93     //    return FALSE;
 94     //}
 95
 96     // ①
 97     //CWindow wnd;
 98     //wnd.Create(szWindowClass,0,CWindow::rcDefault,
 99     //_T("Windows Application"),
100     //WS_OVERLAPPEDWINDOW,WS_EX_CLIENTEDGE);
101     //if(!wnd)
102     //    return -1;
103     //wnd.CenterWindow();
104     //wnd.ShowWindow(nCmdShow);
105     //wnd.UpdateWindow();
106
107     //②
108     CMainWindow wnd;
109     wnd.Create(0,CWindow::rcDefault,_T("Windows Application"),
110             WS_OVERLAPPEDWINDOW,WS_EX_CLIENTEDGE);
111     if(!wnd)
112         return -1;
113     wnd.CenterWindow();
114     wnd.ShowWindow(nCmdShow);
115     wnd.UpdateWindow();
116
117     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_ATLWINTEST));
118
119     // メイン メッセージ ループ:
120     while (GetMessage(&msg, NULL, 0, 0))
121     {
122         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
123         {
124             TranslateMessage(&msg);
125             DispatchMessage(&msg);
126         }
127     }
128
129     _Module.Term();
130
131     return (int) msg.wParam;
132 }
133
134
135
136 //
137 //  関数: MyRegisterClass()
138 //
139 //  目的: ウィンドウ クラスを登録します。
140 //
141 //  コメント:
142 //
143 //    この関数および使い方は、‘RegisterClassEx‘ 関数が追加された
144 //    Windows 95 より前の Win32 システムと互換させる場合にのみ必要です。
145 //    アプリケーションが、関連付けられた
146 //    正しい形式の小さいアイコンを取得できるようにするには、
147 //    この関数を呼び出してください。
148 //
149 //ATOM MyRegisterClass(HINSTANCE hInstance)
150 //{
151 //    WNDCLASSEX wcex;
152 //
153 //    wcex.cbSize = sizeof(WNDCLASSEX);
154 //
155 //    wcex.style            = CS_HREDRAW | CS_VREDRAW;
156 //    wcex.lpfnWndProc    = WndProc;
157 //    wcex.cbClsExtra        = 0;
158 //    wcex.cbWndExtra        = 0;
159 //    wcex.hInstance        = hInstance;
160 //    wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ATLWINTEST));
161 //    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
162 //    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
163 //    wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_ATLWINTEST);
164 //    wcex.lpszClassName    = szWindowClass;
165 //    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
166 //
167 //    return RegisterClassEx(&wcex);
168 //}
169
170 //
171 //   関数: InitInstance(HINSTANCE, int)
172 //
173 //   目的: インスタンス ハンドルを保存して、メイン ウィンドウを作成します。
174 //
175 //   コメント:
176 //
177 //        この関数で、グローバル変数でインスタンス ハンドルを保存し、
178 //        メイン プログラム ウィンドウを作成および表示します。
179 //
180 //BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
181 //{
182 //   HWND hWnd;
183 //
184 //   hInst = hInstance; // グローバル変数にインスタンス処理を格納します。
185 //
186 //   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
187 //      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
188 //
189 //   if (!hWnd)
190 //   {
191 //      return FALSE;
192 //   }
193 //
194 //   ShowWindow(hWnd, nCmdShow);
195 //   UpdateWindow(hWnd);
196 //
197 //   return TRUE;
198 //}
199
200 //
201 //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)
202 //
203 //  目的:  メイン ウィンドウのメッセージを処理します。
204 //
205 //  WM_COMMAND    - アプリケーション メニューの処理
206 //  WM_PAINT    - メイン ウィンドウの描画
207 //  WM_DESTROY    - 中止メッセージを表示して戻る
208 //
209 //
210 //LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
211 //{
212 //    int wmId, wmEvent;
213 //    PAINTSTRUCT ps;
214 //    HDC hdc;215 //    CWindow wnd(hWnd);
216 //    RECT rect;

217 //
218 //    switch (message)
219 //    {
220 //    case WM_COMMAND:
221 //        wmId    = LOWORD(wParam);
222 //        wmEvent = HIWORD(wParam);
223 //        // 選択されたメニューの解析:
224 //        switch (wmId)
225 //        {
226 //        case IDM_ABOUT:
227 //            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
228 //            break;
229 //        case IDM_EXIT:
230 //            DestroyWindow(hWnd);
231 //            break;
232 //        default:
233 //            return DefWindowProc(hWnd, message, wParam, lParam);
234 //        }
235 //        break;
236 //    case WM_PAINT:
237 //        //hdc = BeginPaint(hWnd, &ps);
238 //        //// TODO: 描画コードをここに追加してください...
239 //        //EndPaint(hWnd, &ps);
240 //        hdc = wnd.BeginPaint(&ps);
241 //        wnd.GetClientRect(&rect);
242 //        DrawText(hdc,_T("Hello,Windows"),-1,&rect,
243 //        DT_CENTER|DT_VCENTER|DT_SINGLELINE);
244 //        wnd.EndPaint(&ps);
245 //        break;
246 //    case WM_DESTROY:
247 //        PostQuitMessage(0);
248 //        break;
249 //    default:
250 //        return DefWindowProc(hWnd, message, wParam, lParam);
251 //    }
252 //    return 0;
253 //}
254
255 // バージョン情報ボックスのメッセージ ハンドラです。
256 //INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
257 //{
258 //    UNREFERENCED_PARAMETER(lParam);
259 //    switch (message)
260 //    {
261 //    case WM_INITDIALOG:
262 //        return (INT_PTR)TRUE;
263 //
264 //    case WM_COMMAND:
265 //        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
266 //        {
267 //            EndDialog(hDlg, LOWORD(wParam));
268 //            return (INT_PTR)TRUE;
269 //        }
270 //        break;
271 //    }
272 //    return (INT_PTR)FALSE;
273 //}
时间: 2024-10-06 18:35:25

WIN32-ATL的相关文章

在VS中使用MFC和ATL与使用WIN32有什么联系或区别?

有时候遇到一些初学者问我这个问题:在VS中使用MFC和ATL与使用WIN32有什么联系或区别?通俗来说,win32是通过调用windows api去实现需要的功能.而MFC和ATL则是封装好的类库,包含windows API和一些算法,提供给用户去使用.每一种类库代表了一种编程思想.打个很简单的例子,如果你喜欢自己维修东西,可以自己去商店掏锤子.螺丝刀.电工刀.钳子等等,也可以去买一个博世工具箱,里边各种工具一应俱全.自己淘货相当于使用win32调用windows api.买的工具箱相当于封装好

VS2008中 ATL CLR MFC Win32 区别

ATL用于编写COM程序,CLR是.NET的公共语言运行库,MFC是指MFC类库,MFC程序是用这些类库做出的程序,WIN32常规就是不用MFC,使用API函数编的程序.MFC.ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用.当然关于C++开发的库不止这3个,不过这3个是微软推荐.从编程所处层次而言,WIN32为最底层,其次是MFC.然后是CLR.WIN32 winAPI MFC MFC类库 CLR .net库 1. WIN32常规就是不用MFC,使用AP

ATL CLR MFC Win32 常规 的区别

ATL用于编写COM程序,CLR是.NET的公共语言运行库,MFC是指MFC类库,MFC程序是用这些类库做出的程序,WIN32常规就是不用 MFC,使用API函数编的程序. MFC.ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用.当然关于C++开发的库不止这3个,不过这3个是微 软推荐.从编程所处层次而言,WIN32为最底层,其次是MFC.然后是CLR. WIN32 winAPI MFC MFC类库 CLR .net库 1. WIN32常规就是不用MFC,

Visual Studio中 ATL CLR MFC Win32 区别

ATL用于编写COM程序, CLR是.NET的公共语言运行库, MFC是指MFC类库,MFC程序是用这些类库做出的程序, WIN32常规就是不用MFC,使用API函数编的程序. MFC.ATL和CLR是VC2005内置的3大库,涵盖了windows的各种开发方法和开发应用.当然关于C++开发的库不止这3个,不过这3个是微软推荐.从编程所处层次而言,WIN32为最底层,其次是MFC.然后是CLR. WIN32 winAPI MFC MFC类库 CLR .net库 1. WIN32常规就是不用MFC

Creating Context Menu / 创建上下文菜单项 / Win32, VC++, Windows, DLL, ATL, COM

创建上下文菜单项 1.新建一个ATL Project. 2.建议将Project Property中Linker – General - “Register Output” 设为no,C/C++ - “Code Generation” - “Runtime Library” 设为 /MTd. 3.在Solution Explorer中右键Add Class,选择ATL Simple Object.并在弹出的对话框中为该Class命名. 4.添加完成后建议Build一下Project,MIDL c

[ATL/WTL]_[初级]_[Win32窗口自定义消息处理过程]

场景 有时候我们需要单独对某个窗口消息进行拦截,比如CEdit响应回车, 这时候就需要拦截窗口处理过程了. 当然MFC的界面可以重载: BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg){ 但是WTL的CEdit并不支持这种方式,WTL如果想在 PreTranslateMessage 里拦截消息,必须继承 CMessageFilter 后还要把这个控件注册到消息循环里才行,也就是必须写子类 或者从父窗口拦截这个CEdit的消息. CMessageLoop*

STL,ATL,WTL之间的联系和区别

一.STL即 Standard Template Library (标准模板库) STL是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Lee和David R Musser在惠普实验室工作时所开发出来的.现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间.STL的代码从广义上讲分为三类:algorithm(算法).container(容器)和iterator(迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于

【转载】ATL问题集

原文:http://blog.csdn.net/fengrx/article/details/4171629 这些问题是以前在csdn当版主是一些朋友整理的,今天找到了,贴到这里来! #1 如何使用控件不能改变大小? 答:有时我们需要创建不可改变大小的控件,像那种在运行时没有界面的控件(例:时间控件,SysInfo 等),想做到这种功能的话,请把以下代码加入到控件类的构造函数: m_bAutoSize = TRUE; SIZEL size = {24, 24}; AtlPixelToHiMetr

谈ATL(一)--说说ATL字符串转换类

大家在使用ATL技术做项目时,一定发现了非常麻烦的字符串字符集问题,下面把常用点和重点记录罗列一下,以备查. ATL提供了许多字符串转换函数,如果编译选项使得源和目的的字符类型相同,那么这些类不执行任何转换,关于设置系统编译项的问题前面windows编程的文章中已经介绍过.如果要使用ATL的字符转换类,那么必须要包含<atlconv.h>文件,转换的具体方式均是通过宏定义(宏函数)来完成,为了更好的列出这些宏函数及明确其功能,需要先说明一下都有哪些字符串类型以及他们的缩写形式: T表示一个指向

c++简单的ATL COM开发和调用实例

1.打开VS2010,新建ATL COM 项目,步骤:"文件" -->"新建" -->"项目",选择"Visual C++" -->"ATL 项目" ,填写"名称" FirstCOM -->"确定". 2.ATL 项目向导,勾选 [支持COM+ 1.0]和[支持部件注册器],其他默认,点击完成. 3.切换到类视图,右键单击项目"Fir