WIN32窗口模板

  1 // WINATLTest.cpp : 定义应用程序的入口点。
  2 //
  3
  4 #include "stdafx.h"
  5 #include "WINATLTest.h"
  6
  7 #define MAX_LOADSTRING 100
  8
  9 // 全局变量:
 10 HINSTANCE hInst;                                // 当前实例
 11 TCHAR szTitle[MAX_LOADSTRING];                    // 标题栏文本
 12 TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名
 13
 14 // 此代码模块中包含的函数的前向声明:
 15 ATOM                MyRegisterClass(HINSTANCE hInstance);
 16 BOOL                InitInstance(HINSTANCE, int);
 17 LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
 18 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 19
 20 int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
 21                      _In_opt_ HINSTANCE hPrevInstance,
 22                      _In_ LPTSTR    lpCmdLine,
 23                      _In_ int       nCmdShow)
 24 {
 25     UNREFERENCED_PARAMETER(hPrevInstance);
 26     UNREFERENCED_PARAMETER(lpCmdLine);
 27
 28      // TODO: 在此放置代码。
 29     MSG msg;
 30     HACCEL hAccelTable;
 31
 32     // 初始化全局字符串
 33     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
 34     LoadString(hInstance, IDC_WINATLTEST, szWindowClass, MAX_LOADSTRING);
 35     MyRegisterClass(hInstance);
 36
 37     // 执行应用程序初始化:
 38     if (!InitInstance (hInstance, nCmdShow))
 39     {
 40         return FALSE;
 41     }
 42
 43     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WINATLTEST));
 44
 45     // 主消息循环:
 46     while (GetMessage(&msg, NULL, 0, 0))
 47     {
 48         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
 49         {
 50             TranslateMessage(&msg);
 51             DispatchMessage(&msg);
 52         }
 53     }
 54
 55     return (int) msg.wParam;
 56 }
 57
 58
 59
 60 //
 61 //  函数: MyRegisterClass()
 62 //
 63 //  目的: 注册窗口类。
 64 //
 65 ATOM MyRegisterClass(HINSTANCE hInstance)
 66 {
 67     WNDCLASSEX wcex;
 68
 69     wcex.cbSize = sizeof(WNDCLASSEX);
 70
 71     wcex.style            = CS_HREDRAW | CS_VREDRAW;
 72     wcex.lpfnWndProc    = WndProc;
 73     wcex.cbClsExtra        = 0;
 74     wcex.cbWndExtra        = 0;
 75     wcex.hInstance        = hInstance;
 76     wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WINATLTEST));
 77     wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
 78     wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);
 79     wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_WINATLTEST);
 80     wcex.lpszClassName    = szWindowClass;
 81     wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 82
 83     return RegisterClassEx(&wcex);
 84 }
 85
 86 //
 87 //   函数: InitInstance(HINSTANCE, int)
 88 //
 89 //   目的: 保存实例句柄并创建主窗口
 90 //
 91 //   注释:
 92 //
 93 //        在此函数中,我们在全局变量中保存实例句柄并
 94 //        创建和显示主程序窗口。
 95 //
 96 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
 97 {
 98    HWND hWnd;
 99
100    hInst = hInstance; // 将实例句柄存储在全局变量中
101
102    hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
103       CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
104
105    if (!hWnd)
106    {
107       return FALSE;
108    }
109
110    ShowWindow(hWnd, nCmdShow);
111    UpdateWindow(hWnd);
112
113    return TRUE;
114 }
115
116 //
117 //  函数: WndProc(HWND, UINT, WPARAM, LPARAM)
118 //
119 //  目的: 处理主窗口的消息。
120 //
121 //  WM_COMMAND    - 处理应用程序菜单
122 //  WM_PAINT    - 绘制主窗口
123 //  WM_DESTROY    - 发送退出消息并返回
124 //
125 //
126 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
127 {
128     int wmId, wmEvent;
129     PAINTSTRUCT ps;
130     HDC hdc;
131
132     switch (message)
133     {
134     case WM_COMMAND:
135         wmId    = LOWORD(wParam);
136         wmEvent = HIWORD(wParam);
137         // 分析菜单选择:
138         switch (wmId)
139         {
140         case IDM_ABOUT:
141             DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
142             break;
143         case IDM_EXIT:
144             DestroyWindow(hWnd);
145             break;
146         default:
147             return DefWindowProc(hWnd, message, wParam, lParam);
148         }
149         break;
150     case WM_PAINT:
151         hdc = BeginPaint(hWnd, &ps);
152         // TODO: 在此添加任意绘图代码...
153         EndPaint(hWnd, &ps);
154         break;
155     case WM_DESTROY:
156         PostQuitMessage(0);
157         break;
158     default:
159         return DefWindowProc(hWnd, message, wParam, lParam);
160     }
161     return 0;
162 }
163
164 // “关于”框的消息处理程序。
165 INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
166 {
167     UNREFERENCED_PARAMETER(lParam);
168     switch (message)
169     {
170     case WM_INITDIALOG:
171         return (INT_PTR)TRUE;
172
173     case WM_COMMAND:
174         if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
175         {
176             EndDialog(hDlg, LOWORD(wParam));
177             return (INT_PTR)TRUE;
178         }
179         break;
180     }
181     return (INT_PTR)FALSE;
182 }

时间: 2024-12-27 03:11:01

WIN32窗口模板的相关文章

Win32窗口消息机制 x Android消息机制 x 异步执行

如果你开发过Win32窗口程序,那么当你看到android代码到处都有的mHandler.sendEmptyMessage和 private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_REPORT_PRIMARY_CLIP_CHANGED: reportPrimaryClipChanged(); }

win32窗口程序的过程

复习一下win32窗口程序 设计一个窗口类: 注册窗口类: 创建窗口: 显示及更新窗口. 消息循环,去获取消息: 窗口过程函数的消息响应. 设计窗口类: typedef struct _WNDCLASS { UINT style; //窗口类的类型 WNDPROC lpfnWndProc; //窗口过程函数(回调函数) int cbClsExtra; //为该类设定额外内存空间 int cbWndExtra; //为该窗口设定额外内存空间 HANDLE hInstance; //当前应用程序的实

WIN32窗口子类化----自定义Edit控件的右键菜单

前言 Win32应用程序中,子控件的消息都是分发到其父窗口的消息处理函数中去了,这对于我们需要自定义子控件的某些特性时时十分不方便的,还好,Windows为我们提供了控件子类化的相关接口API.核心的思想是:通过获取子控件的消息处理函数地址,设置子控件的消息处理函数到自己定义的函数里,也就是Get/SetWindowLong API的使用. 测试代码 这里是一个简单的测试程序,在控制台程序中创建一个对话框,然后对话框上有一个EDIT控件(资源编辑器里拖入的,不多说),子类化EDIT控件,右键弹出

解决WIN32窗口不响应WM_LBUTTONDBLCLK消息

原文链接: http://www.cnblogs.com/xukaixiang/archive/2012/05/27/2520059.html 今天在做一个软件时,发现win32创建的窗体不能响应WM_LBUTTONDBLCLK消息.在一番谷歌百度之后,终于找到了解决方法:废话少说,言归正传. 窗体不响应WM_LBUTTONDBLCLK消息,只要在注册窗口类的时候在WNDCLASS的style成员加上CS_DBLCLKS风格就行了. 下面是几种CS风格: CS_HREDRAW:当窗体的宽度发生变

win32 窗口缩放时出现闪屏

今天无意发现之前写的一个小工具在缩放窗口的时候,出现闪屏,主要有两个位置: 工具栏出一闪屏 右侧的控制面板出现闪屏 (这个控制面板与多层元件组合而成) 之前真没注意到这个问题,平时都是最大化/恢复窗口,没缩放窗口,所以没发现这样的问题. 网上搜索了一下,找到一些解决方案: [百度文库] VC窗口闪烁问题的解决 - http://wenku.baidu.com/view/3c7e747931b765ce0508146a.html 我遇到的问题属于第2种情况: 原因二:  复杂的界面有多层窗口组成,

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

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

3.win32窗口类

1.窗口类 窗口类包含了窗口的各种参数信息的数据结构.每个窗口都具有窗口类,基于窗口类创建窗口.每个窗口类都具有一个名称,使用之前必须注册到系统. 2.窗口类的分类 1)系统窗口类 系统已经定义好的窗口类,所有应用程序都可以直接使用. 2)应用程序全局窗口类 由用户自己定义,当前应用程序所有模块都可以使用. 3)应用程序局部窗口类 由用户自己定义,当前应用程序中本模块可以使用. 3. 系统窗口类 注册窗口类的步骤必须要做,但是系统窗口类不需要(程序员)注册,直接使用窗口类即可.系统已经定义好的相

解决Duilib创建的win32窗口拖到屏幕上边缘自动最大化

转载:http://bbs.csdn.net/topics/390842294 使用Duilib创建窗口的时候,假如有这样一个需求: 1.窗口大小规定 2.不可拖拽改变窗口大小 3.双击标题栏禁止最大化 4.禁止拖拽窗口到屏幕上边沿最大化 针对以上四点,给出解决办法: 1.设置size="宽,高" 2.sizebox="0,0,0,0" 3.在HandleMessage中屏蔽掉WM_NCLBUTTONDBLCLK 1 case WM_NCLBUTTONDBLCLK:

win32窗口机制之CreateWindow

CreateWindow 函数功能:该函数创建一个重叠式窗口.弹出式窗口或子窗口.它指定窗口类,窗口标题,窗口 风格,以及窗口的初始位置及大小(可选的).该函数也指定该窗口的父窗口或所属窗口(如果存在 的话),及窗口的菜单.若要使用除CreateWindow函数支持的风格外的扩展风格,则使用 CreateWindowEx函数代替CreateWindow函数. 函数原型:HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD