1、windows.h头文件

windows.h是主要的包含文件,包含其他windows头文件,其中包含最重要和最基本的是:
windef.h——基本类型定义
winnt.h——支持unicode的类型定义
winbase.h——内核函数
winuser.h——用户接口函数
wingdi.h——图形设备接口函数
这些头文件定义了windows的所有数据类型、函数调用、数据结构和常数标识符,是windows文档中的一个重要部分。

2、程序入口点

我们在vs2008中创建一个win32 project的windows工程,如下:

// testWindows.cpp : Defines the entry point for the application.
//#include "stdafx.h"
#include "testWindows.h"#define MAX_LOADSTRING 100// Global Variables:
HINSTANCE hInst;                                // current instance
TCHAR szTitle[MAX_LOADSTRING];                  // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING];            // the main window class name// Forward declarations of functions included in this code module:
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(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)
{UNREFERENCED_PARAMETER(hPrevInstance);UNREFERENCED_PARAMETER(lpCmdLine);// TODO: Place code here.MSG msg;HACCEL hAccelTable;// Initialize global stringsLoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);LoadString(hInstance, IDC_TESTWINDOWS, szWindowClass, MAX_LOADSTRING);MyRegisterClass(hInstance);// Perform application initialization:if (!InitInstance (hInstance, nCmdShow)){return FALSE;}hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_TESTWINDOWS));// Main message loop:while (GetMessage(&msg, NULL, 0, 0)){if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)){TranslateMessage(&msg);DispatchMessage(&msg);}}return (int) msg.wParam;
}//
//  FUNCTION: MyRegisterClass()
//
//  PURPOSE: Registers the window class.
//
//  COMMENTS:
//
//    This function and its usage are only necessary if you want this code
//    to be compatible with Win32 systems prior to the 'RegisterClassEx'
//    function that was added to Windows 95. It is important to call this function
//    so that the application will get 'well formed' small icons associated
//    with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);wcex.style           = CS_HREDRAW | CS_VREDRAW;wcex.lpfnWndProc = WndProc;wcex.cbClsExtra      = 0;wcex.cbWndExtra        = 0;wcex.hInstance     = hInstance;wcex.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TESTWINDOWS));wcex.hCursor       = LoadCursor(NULL, IDC_ARROW);wcex.hbrBackground   = (HBRUSH)(COLOR_WINDOW+1);wcex.lpszMenuName  = MAKEINTRESOURCE(IDC_TESTWINDOWS);wcex.lpszClassName  = szWindowClass;wcex.hIconSm       = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassEx(&wcex);
}//
//   FUNCTION: InitInstance(HINSTANCE, int)
//
//   PURPOSE: Saves instance handle and creates main window
//
//   COMMENTS:
//
//        In this function, we save the instance handle in a global variable and
//        create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{HWND hWnd;hInst = hInstance; // Store instance handle in our global variablehWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);if (!hWnd){return FALSE;}ShowWindow(hWnd, nCmdShow);UpdateWindow(hWnd);return TRUE;
}//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_COMMAND  - process the application menu
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{int wmId, wmEvent;PAINTSTRUCT ps;HDC hdc;switch (message){case WM_COMMAND:wmId    = LOWORD(wParam);wmEvent = HIWORD(wParam);// Parse the menu selections:switch (wmId){case IDM_ABOUT:DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);break;case IDM_EXIT:DestroyWindow(hWnd);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}break;case WM_PAINT:hdc = BeginPaint(hWnd, &ps);// TODO: Add any drawing code here...EndPaint(hWnd, &ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hWnd, message, wParam, lParam);}return 0;
}// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{UNREFERENCED_PARAMETER(lParam);switch (message){case WM_INITDIALOG:return (INT_PTR)TRUE;case WM_COMMAND:if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL){EndDialog(hDlg, LOWORD(wParam));return (INT_PTR)TRUE;}break;}return (INT_PTR)FALSE;
}

入口点:

int APIENTRY _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR    lpCmdLine,int       nCmdShow)

Ctrl+Gtiao跳转到tchar.h,定义如下

#define _tmain      main
#define _tWinMain   WinMain
#ifdef  _POSIX_
#define _tenviron   environ
#else
#define _tenviron  _environ
#endif
#define __targv     __argv

Ctrl+G查看WinMain的定义,在winbase.h如下:

int
#if !defined(_MAC)
#if defined(_M_CEE_PURE)
__clrcall
#else
WINAPI
#endif
#else
CALLBACK
#endif
WinMain (__in HINSTANCE hInstance,__in_opt HINSTANCE hPrevInstance,__in_opt LPSTR lpCmdLine,__in int nShowCmd);int
#if defined(_M_CEE_PURE)
__clrcall
#else
WINAPI
#endif
wWinMain(__in HINSTANCE hInstance,__in_opt HINSTANCE hPrevInstance,__in_opt LPWSTR lpCmdLine,__in int nShowCmd);

LPWSTR :其中的"LP"表示长指针(Long pointer)
匈牙利表示法:在变量名称前增加表示变量数据类型的端前缀,如nShowCmd、hPrevInstance等。
在windef.h文件中有如下:

#define CALLBACK    __stdcall
#define WINAPI      __stdcall
#define WINAPIV     __cdecl
#define APIENTRY    WINAPI
#define APIPRIVATE  __stdcall
#define PASCAL      __stdcall

#define WINAPI __stdcall指定了一个调用约定,包括如何生成机器代码以在堆栈中防止函数调用的参数。下面来看看WinMain的参数。
hInstance:实例句柄。仅是一个应用程序用来识别某些事件的标志,唯一地标识一个程序,其他的函数需要使用该句柄作为参数调用该程序。同一应用程序的所有实例共享代码和只读的内存
hPrevInstance:可用来确定自身的其他实例是否正在运行。可将某些数据从前面的实例移到自己的数据区域,目前该参数总是NULL
lpCmdLine:运行程序的命令行
nShowCmd:程序最初显示的方式,可以是正常或者最大化整个窗口、或最小化显示在任务列表栏中。

3、MessageBox

该函数主要是用于显示消息提示,可认为是一个对话框。

4、编译、链接和运行

正常情况下,在编译阶段,程序没有错误,编译器从源代码文件生成一个.obj文件。
在链接阶段,程序没有错误,链接程序结合.obj文件和.lib文件建立.exe文件。在windows下的程序,都会使用windows库等一些库里面的函数,因此必须链接一些lib文件。
经过编译和链接,我们得到了一个exe可执行文件,这个时候我们可以双击直接运行该exe。

参考<Windows程序设计第五版>

windows程序设计基础知识相关推荐

  1. python程序设计基础知识

    程序设计基础知识 1根据执行方式不同,编程语言分为两类: 静态语言:使用编译执行的编程语言 C/C++语言.Java语言 脚本语言:使用解释执行的编程语言 Python语言.JavaScript语言. ...

  2. 程序设计基础c语言版习题答案,C语言程序设计基础知识 习题一及参考答案

    C语言实用复习题目及答案.帮你更好地学习C程序设计~ 第一章:程序设计基础知识 一. 单项选择题 1.以下( )是面向过程的程序设计语言. A)机器语言 B)汇编语言 C)高级语言 D)第四代语言 2 ...

  3. php程序设计ppt,PHP程序设计基础知识.ppt

    <PHP程序设计基础知识.ppt>由会员分享,可在线阅读,更多相关<PHP程序设计基础知识.ppt(14页珍藏版)>请在人人文库网上搜索. 1.第3章 PHP程序设计基础知识( ...

  4. Windows 程序设计基础

    常见Windows对象的句柄有: Windows对象              相关句柄 设备环境               HDC 窗口                       HWND 菜单 ...

  5. C语言程序设计基础知识——谭浩强版

    1.一个程序应包括: 对数据的描述.在程序中要指定数据的类型和数据的组织形式,即数据结构. 对操作的描述.即操作步骤,算法. 程序=算法+数据结构 2.C源程序的结构特点 可以由一个或多个源文件组成. ...

  6. 2020-09-27程序设计基础知识

    1.进制: 十进制变二进制: 八进制变二进制:(15552)=(001 101 101 101 010) 将对应数字用二进制表示出来,再进行组合,开头的0可以去掉. 000=0 001=1 010=2 ...

  7. 计算机算法与程序设计基础知识,算法与程序设计试题带答案

    高一第二学期<算法与程序设计>学分认定试题 学校:_____________ 班级:____________ 学号:____________ 姓名:____________ 一.单选题(每 ...

  8. vfp体积计算机程序,2017计算机二级VFP复习:VFP程序设计基础

    大家做好准备迎接考试了吗?出国留学网计算机等级考试栏目诚意整理"2017计算机二级VFP复习:VFP程序设计基础",欢迎广大考生前来学习. VFP程序设计基础 知识要点 1.Vis ...

  9. ACM程序设计基础结课总结

    ACM程序设计基础结课总结 目录: 1.ACM程序设计基础学习感悟: 2.ACM程序设计基础知识学习心得: 3.ACM程序设计基础知识学习收获: ACM程序设计基础学习感悟: 从最开始上了大学接触到编 ...

  10. 《Windows网络与通信程序设计(第3版)》——1.4 网络应用程序设计基础

    本节书摘来自异步社区<Windows网络与通信程序设计(第3版)>一书中的第1章,第1.4节,作者: 陈香凝 , 王烨阳 , 陈婷婷 , 张铮 更多章节内容可以访问云栖社区"异步 ...

最新文章

  1. 实验四-常用图像增强方法
  2. SQLServer2000 数据库恢复模型详解
  3. android开发--ListView中的getView原理
  4. TCP模拟QQ聊天案例
  5. [云炬创业基础笔记]第二章创业者测试8
  6. ARP(Address Resolution Protocol)地址解析协议初识
  7. 幂等和高并发在电商系统中的使用
  8. primefaces_PrimeFaces Mobile入门
  9. 前端笔记-vue cli引入sementic-ui(sementic-ui-vue)
  10. 第六次程序设计作业 计算器图型界面的设计
  11. 《CSS基础教程》 读书笔记二
  12. 【复习资料】编译原理中:短语,直接短语,句柄
  13. mac 2k显示器字体发虚_精准色彩体验-优派VP2785-2K
  14. Python Cookbook手记II
  15. php魔术方法例子,PHP魔术方法示例
  16. String 是值类型还是引用类型
  17. Intellij IDEA 代码格式化配置和快捷键
  18. 【学习】从零开始的Android音视频开发(6)——MediaPlayerService中BinderDriver、创建播放器过程、建立StageFright层交互
  19. 实习工作日志-2019.02.25
  20. Windows 10企业批量部署实战之WDS配置

热门文章

  1. python中arcsec_python – 更好的方法来计算Skyfield中两个物体的明显角度分离?
  2. WEBPACK+ES6+REACT入门(5/7)-在React中为按钮绑定点击事件
  3. 字典哈希表的实现原理_字典哈希表的实现原理
  4. 获取音频频响和失真_专业音响设备_音频功放失真的四大要点及改善方法
  5. GCD and LCM HDU 4497 数论
  6. PhpStorm Live Template加PHP短语法Short Open Tags打造原生模板
  7. bzoj 4605: 崂山白花蛇草水
  8. matlb:图像的几何矩,中心矩,Hu不变矩(含代码)
  9. 用nodejs框架Ghost快速搭建自己的网站
  10. Modifying a Dynamic Library Without Changing the Source Code