这是我第一次写博客,目的也很简单,就是希望自己能对学习的知识有个整理,以后能方便查阅,同时也希望这些内容能帮助到一些人。
今天主要介绍win32的基础框架, 我使用的开发环境是VS2013.使用的语言是C/C++
windows四大程序模块:
1.1控制台程序
没有自己的窗口,dos-显示或者运行程序,入口mian()
1.2窗口程序
有自己的窗口,win32,mfc,qt,入口WinMain
1.3动态库
后缀dll,不可以单独运行,直接注入到可执行程序中
入口函数DllMain,不是必须.
1.4静态库
以lib为后缀的程序,只用来存储代码和数据.
执行程序直接赋值代码,没有入口函数
win32 概述:
Win32 API作为 Microsoft 32位平台(包括:Windows 9x,Windows NT3.1/4.0/5.0,WindowsCE)的应用程序编程接口,它是构筑所有32位Windows平台的基石,所有在Windows平台上运行的应用程序都可以调用这些函数。
win32基础框架 :
(使用vs2013自动生成的win32项目,不会的,可以参考https://jingyan.baidu.com/article/ea24bc398573b3da62b33104.html)如下:(只展示.cpp部分)
// test.cpp : 定义应用程序的入口点。
//
#include "stdafx.h"
#include "test.h"
#define MAX_LOADSTRING 100
// 全局变量:
HINSTANCE hInst; // 当前实例
TCHAR szTitle[MAX_LOADSTRING]; // 标题栏文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主窗口类名
// 此代码模块中包含的函数的前向声明:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_TEST, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TEST));
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessa