窗口
进行Windows程序设计,实际上是在进行一种面向对象的程序设计OOP!对象是程序与数据的组合,窗口是一种对象:程序是窗口消息处理程序;数据是窗口消息处理程序保存的信息和Windows为每个窗口以及系统中那个窗口类别保存的信息
窗口类 vs 窗口:窗口类是类型,是模子;窗口是对象,是窗口类的实例
一个窗口就是屏幕上的一个矩形区域,它接收用户的输入并以文字或图形的格式显示输出内容:在屏幕上输出的内容本质上是一个一个像素画出来的
窗口:窗口 + 对话框
创建窗口的工作实际上操作系统完成的,应用程序通过API的参数告诉操作系统需要创建什么样的窗口,例如窗口的宽高,需不需要菜单等等:总而言之,应用程序是指挥操作系统干活的,真正干活的是操作系统(操作系统就是提供服务器的)
Windows操作系统给应用程序发消息:Windows操作系统将感知的事件封装成消息结构放到应用程序的消息队列中
应用程序呼叫调用操作系统:应用程序调用了操作系统提供的接口函数,例如CreateWindow:CPU控制权从用户态切换到核心态
操作系统呼叫应用程序:回调函数Callback:CPU控制权从核心态切换到用户态
syscall vs callback
在建立窗口前为什么要注册窗口类?一切权利归农会(操作系统就是这个农会)操作系统是管理所有资源的大管家(当然报个应用程序以及应用程序中的窗口);窗口是窗口类的实例,也就是说窗口是基于特定类型的窗口类来创建的;真正创建窗口的工作是操作系统,所以操作系统必须知道创建窗口的类型长什么样子;创建窗口之前必须到农会(操作系统)哪里登记注册
#include <windows.h>
#include <trace.h>
LRESULT CALLBACK WndProc ( HWND, UINT, WPARAM, LPARAM) ;
int WINAPI WinMain ( HINSTANCE hInstance,
HINSTANCE hPreInstance,
PSTR lpCmdLine,
int nCmdShow
) {
static TCHAR szWndClsName[ ] = TEXT ( "HelloWin" ) ;
HWND hwnd;
MSG msg;
WNDCLASS wndclass;
wndclass. style = CS_HREDRAW | CS_VREDRAW;
wndclass. cbClsExtra = 0 ;
wndclass. cbWndExtra = 0 ;
wndclass. hInstance = hInstance;
wndclass. hIcon = LoadIcon ( NULL , IDI_APPLICATION) ;
wndclass. hCursor = LoadCursor ( NULL , IDC_ARROW) ;
wndclass. hbrBackground = ( HBRUSH) GetStockObject ( WHITE_BRUSH) ;
wndclass. lpszMenuName = NULL ;
wndclass. lpszClassName = szWndClsName;
wndclass. lpfnWndProc = WndProc;