第4讲windows编程机制(1)(编辑修改稿)内容摘要:

对应的那一位( bit)为 1,其余的 bit都为 0。 33 --窗口类的类型 使用 goto definition,发现 CS_VREDRAW=0x0001,CS_HREDRAW=0x0002, CS_DBLCLKS =0x0008, CS_NOCLOSE=0x0200。 共同点就是只有一位为 1,其余位都为 0。 如果希望某一变量的值既有 CS_VREDRAW又有 CS_HREDRAW特性,可使用 或 运算,如: style=CS_VREDRAW | CS_HREDRAW ; 如果希望在某一变量原有的几个特征上去掉其中一个特征,用 取反 ( ~)之后再进行 与 ( amp。 )运算。 如在刚才的 style的基础上去掉 CS_NOCLOSE特征,可以用: style=styleamp。 ~CS_NOCLOSE; 34 --窗口过程函数 lpfnWndProc:指定了这一类型窗口的过程函数,也称回调函数。 回调函数的原理:当应用程序收到给某一窗口的消息时,就应该调用某一函数来处理这条消息。 这一调用过程不用应用程序自己来实施,而由操作系统来完成,但是,回调函数本身的代码必须由应用程序自己完成。 对于一条消息,操作系统到底调用应用程序中的哪个函数(回调函数)来处理呢。 操作系统调用的就是接受消息的窗口所属的类型中的 lpfnWndProc成员指定的函数。 每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过 lpfnWndProc成员指定的。 35 --窗口过程函数 举例:汽车厂家生产汽车好比应用程序创建窗口,用户使用汽车好比操作系统管理窗口,某种汽车在销售前就指定好了修理站(类似回调函数),当用户的汽车出现故障后(类似窗口收到消息),汽车用户(类似操作系统)自己直接找到修理站去修理,不用厂家(类似应用程序)亲自将车送到修理站去修理,但修理站还得由厂家事先建造好。 36 --设计窗口类的示例代码 WNDCLASS wndcls。 =CS_HREDRAW | CS_VREDRAW。 =0。 =0。 =(HBRUSH)GetStockObject(BLACK_BRUSH)。 =LoadCursor(NULL,IDC_CROSS)。 =LoadIcon(NULL,IDI_ERROR)。 =hInstance。 =WindowProc。 =xiexin20xx。 =NULL。 37 注册窗口类 刚才有: WNDCLASS wndcls。 所以: RegisterClass(amp。 wndcls)。 ATOM RegisterClass( CONST WNDCLASS *lpWndClass)。 参数 lpWndClass:设计窗口类的对象指针 38 创建窗口 HWND CreateWindow( LPCTSTR lpClassName, // to registered class name LPCTSTR lpWindowName, //2. pointer to window name DWORD dwStyle, // style int x, // position of window int y, //5. vertical position of window int nWidth, //6. window width int nHeight, // height HWND hWndParent, //8. handle to parent or owner window HMENU hMenu, // to menu or childwindow identifier HANDLE hInstance, // to application instance LPVOID lpParam //11. pointer to windowcreation data )。 39 -- 创建窗口 的示例代码 HWND hwnd。 hwnd=CreateWindow(xiexin20xx,My window, WS_OVERLAPPEDWINDOW, 0,0,600,400,NULL,NULL,hInstance,NULL)。 注:创建成功后,返回系统分配给窗口句柄,否则返回NULL。 因此要用一个句柄变量(如 hwnd)来保存 WS_OVERLAPPEDWINDOW类型 的窗口具有: Creates an overlapped window with the WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, and WS_MAXIMIZEBOX styles. 40 显示及更新窗口 BOOL ShowWindow( HWND hWnd, //窗口创建成功后的句柄 int nCmdShow // 窗口显示状态 )。 BOOL UpdateWindow( HWND hWnd // 窗口创建成功后的句柄 )。 ShowWindow(hwnd ,SW_SHOWNORMAL)。 UpdateWindow(hwnd)。 还有: SW_MAXIMIZE , SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWDEFAULT 等 41 -- 创建窗口 的示例代码 HWND hwnd。 hwnd=CreateWindow(xiexin20xx,My window, WS_OVERLAPPEDWINDOW, 0,0,600,400,NULL,NULL,hInstance,NULL)。 WS_OVERLAPPEDWINDOW类型 的窗口具有: Creates an overlapped window with the WS_OVERLAPPED, WS_CAPTION, WS_SYSMENU, WS_THICKFRAME, WS_MINIMIZEBOX, and WS_MAXIMIZEBOX styles. 42 Windows消息循环 消息队列和在应用程序中的轮询处理 43 Windows消息循环 BOOL GetMessage( LPMSG lpMsg, // 指向消息结构体的地址 HWND hWnd, // 接收消息的窗口句柄 UINT wMsgFilter。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。