win32 编程由简入繁之二:各种控件窗口、子窗口,处理资源文件
1。所有的控件,除了菜单,都是窗口,这些窗口类不需要再RegisterClass,可以直接用 。倒数第4个参数是指定他的父窗口的句柄,没有父窗口就写0。
如:
stx = CreateWindow("Static","A Random Static Label",WS_CHILD | WS_VISIBLE ,0,0,200,25,hwnd,0,g_hInst,0);
static_label = CreateWindow("Static","This static label",WS_CHILD | WS_VISIBLE,205,0,200,25,hwnd,0,g_hInst,0);
edit = CreateWindow("Edit","A Windows Edit Box",WS_BORDER | WS_VSCROLL | WS_CHILD | WS_VISIBLE | ES_MULTILINE | ES_AUTOHSCROLL,5,35,200,200,hwnd,(HMENU)ID_EDIT,g_hInst,0);
list = CreateWindow("ListBox",NULL, LBS_NOTIFY | WS_CHILD | WS_VISIBLE | WS_VSCROLL|WS_BORDER,5,250,200,200,hwnd,(HMENU)ID_LIST,g_hInst,0);
button = CreateWindow("Button","About",BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE ,350,5,100,25,hwnd,(HMENU)ID_BUTTON,g_hInst,0);
static_image = CreateWindow("Static",NULL,WS_CHILD | WS_VISIBLE | SS_BITMAP,350,40,0,0,hwnd,(HMENU)ID_IMAGE,g_hInst,0);
combo = CreateWindow("ComboBox",NULL,WS_BORDER | CBS_DISABLENOSCROLL | WS_CHILD | CBS_DROPDOWNLIST | WS_VISIBLE,350,400,200,200,hwnd,(HMENU)ID_COMBO,g_hInst,0);
2。这些特殊控件类的窗口消息处理不用你写,SDK已经写好了。
3。控件类的窗口和它的父窗口可以互相发送消息,当单击、双击这些控件时,这些控件窗口会向父窗口发送COMMAND消息,父窗口可以在它的消息处理函数里做相应的处理,也可以发送消息给控件类窗体,如:
SendMessage(list,LB_ADDSTRING,255,(LPARAM)(LPCSTR)"You clicked the button");
list:控件窗口的句柄,LB_ADDSTRING:消息代号
资源文件处理:LoadIcon、LoadCursor、LoadBitmap等
MAKEINTRESOURCE是一个资源名转换的宏, 这个宏是把一个数字类型转换成指针类型的宏,它不存在释放的问题.
用这个宏的主要原因是有的资源是用序号定义的,而不是字符串.所以要把数字转换成字符串指针,然后再传递给LoadResource之类的函数,这样才加载了资源.
要释放资源(用LoadResource加载的)可以调用FreeResource函数把LoadResource返回的指针传递给FreeResource.