think window procedure

1.用Win32 API编程时,window procedure比较明显,那就是程序员自定义window procedure,但Win32提供了一个API函数DefWindowProc(),缺省的处理要交给它。

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
  WNDCLASSEX wcex;
  wcex.lpszClassName = "MyClass";
  wcex.lpfnWndProc = (WNDPROC)MyWndProc;
  ...
  RegisterClassEx(&wcex);
  HWND hWnd;
  hWnd = CreateWindow("MyClass", szTitle, WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
  if (!hWnd)
    return FALSE;
  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);
  while (GetMessage(&msg, NULL, 0, 0))
  {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }
  return msg.wParam;
}
LRESULT CALLBACK MyWndProc(HWND hWnd,
  UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message)
  {
  ...
  default:
    return DefWindowProc(hWnd, message, wParam, lParam);
  }
  return 0;
}

2.用MFC,window procedure会复杂一些,先看静态的,就是MFC预注册过的那些类,一句话,MFC替你打点好了window procedure的事。
2.1 最抽象的,MFC把window procedure封装了起来,程序员只需"programming by difference",你对哪个消息感兴趣,就建立哪个消息的响应函数。(当然还有虚函数override...)

void CMyClass::OnLButtonDown(UINT nFlags, CPoint pt)
{
  ...
}

时间: 2024-09-07 15:29:58

think window procedure的相关文章

Henry的VB.NET之旅(十二)—事件驱动

Henry的VB.NET之旅(十二)-事件驱动 韩睿 "可视继承原来这么方便!"我心中默默地感叹一声.一会儿之后,我抬头扫了一眼屏幕上的代码后,突然发现了一个新问题,按钮的单击事件程序现在已经变成了: VB.NET程序 VB程序 Private Sub btnProtected_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProtected.Click MsgBox("

MFC教程(12)-- 对话框和对话框类CDialog(1)

对话框经常被使用,因为对话框可以从模板创建,而对话框模板是可以使用资源编辑器方便地进行编辑的. 模式和无模式对话框 对话框分两种类型,模式对话框和无模式对话框. 模式对话框 一个模式对话框是一个有系统菜单.标题栏.边线等的弹出式窗口.在创建对话框时指定WS_POPUP, WS_SYSMENU, WS_CAPTION和 DS_MODALFRAME风格.即使没有指定WS_VISIBLE风格,模式对话框也会被显示. 创建对话框窗口时,将发送WM_INITDIALOG消息(如果指定对话框的DS_SETF

VB中子分类技术的应用

子分类技术的原理:要先取得原先Window Procedure所在的地址,将之记录起来,接着设定所有的消息都先转到我们所写的消息处理过程上来,我们过滤传过来的消息,寻找特定的消息进行处理,其余的送回系统,由系统决定如何处理.等到我们不需要再处理这些特定的消息时,便取消消息的截取,即中止子分类过程.它一般需要三个过程:开始截取,消息处理,中止截取. 程序需要一个模块,在模块中声明如下: 'API函数Declare Function SetWindowLong Lib "user32" A

限制Form Resize的最大值

当Form的Position更动或大小改变时,会Send WM_GETMINMAXINFO的讯息,当我们取得这个讯息时,可以更动该讯息内定Windows Resize的值,不过本人目前只有测出如何限定其最大的Size,而最小的Size目前没有测出来,知道可者告诉我 Option Explicit '以下程式在module1.bas Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _

Invalidate,Update与Refresh有什么区别

在做Windows Forms开发的时候,免不了需要手动刷新窗口,以重绘所需更改的控件,或其它什么的.当出现这类需求时,你有三个选择,使用Invalidate,Update或者Refresh方法. Invalidate有六个重载方法: public void Invalidate(Region region) public void Invalidate(Region region, bool invalidateChildren) public void Invalidate() public

界面开发(二)--- NativeWindow

NativeWindow是.net Framework提供的一个底层的类.微软官方的解释为:NativeWindow Provides a low-level encapsulation of a window handle and a window procedure.说道这 些也相当于没有说,因为NativeWindow到底是干什么的也没有说清楚,意思就是一个低级别的 对窗体句柄和窗体过程的一个封装.后来查询了很多的资料才明白了其中的意义. 资料来源: http://www.diybl.co

一种实现Win32消息处理处理函数的新方法 - 基于Thunk实现的类成员消息处理函数

Windows是一个消息驱动的操作系统,在系统中发生的所有消息均需要通过消息处理过程(或叫窗口过程)进行处理.由于C++给我们在程序设计中带来更多的灵活性(如继承.重载.多态等),所以我们都希望能够使用C++的类来封装Windows中的窗口过程函数,但是Windows规定了窗口过程函数必须定义为一个全局函数,也就是说需要使用面向过程的方法来实现,为了使用面向对象的技术来实现消息处理,我们必须另辟它径.目前我们在网络上见得比较多的方式是使用Thunk将即将传递给窗口过程的第一个参数(HWND hW

Timers Tutorial

Table of Contents Introduction Standard Win32 Timers Multimedia Timers Waitable Timers Queue Timers Conclusion Introduction The goal of this article is to show the practical use of different kinds of timers. First, we will see how to use the "standar

编程-大神,CreateWindowExW函数该怎么写?

问题描述 大神,CreateWindowExW函数该怎么写? #includeLRESULT CALLBACK WndProc(HWNDUINTWPARAMLPARAM);int APIENTRY WinMain(HINSTANCE hInstanceHINSTANCE hPrevInstanceLPSTR lpCmdLineint nCmdShow){ WNDCLASS wndclass; HWND hWnd; MSG msg; wndclass.style=CS_HREDRAW|CS_VRE