添加菜单和控件
添加菜单:CreateMenu()创建一个主菜单,用CreatePopupMenu()可以创建一个下拉的菜单项
AppendMenu:可以创建一个指定的菜单或者创建一个下拉的菜单
函数的格式:BOOL AppendMenu(hMenu hMenu,UINT uFlags,UINT uIDNewltem,LPCTSTR lpNewltem);
第一个参数:将要修改的菜单或者下拉菜单的句柄
第二个参数:是菜单的一些信息,如下
MF_BITMAP:将一个位图用作菜单项。参数lpNewltem里含有该位图的句柄。
MF_CHECKED:在菜单项旁边放置一个选取标记。如果应用程序提供一个选取标记,位图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边。
MF_DISABLED:使菜单项无效,使该项不能被选择,但不使菜单项变灰。
MF_ENABLED:使菜单项有效,使该项能被选择,并使其从变灰的状态恢复。
MF_GRAYED:使菜单项无效并变灰,使其不能被选择。
MF_MENUBARBREAK:对条的功能同MF_MENUBREAK标志。对下拉式菜单、子菜单或,新列和旧列被垂直线分开。
MF_MENUBREAK:将菜单项放置于新行(对菜单条),或新列(对下拉式菜单、子菜单或快捷菜单)且无分割列。
MF_OWNERDRAW:指定该菜单项为自绘制菜单项。菜单第一次显示前,拥有菜单的窗口接收一个WM_MEASUREITEM消息来得到菜单项的宽和高。然后,只要菜单项被修改,都将发送WM_DRAWITEM消息给菜单拥有者的窗口程序。
MF_POPUP:指定菜单打开一个下拉式菜单或子菜单。参数uIDNewltem下拉式菜单或子菜单的句柄。此标志用来给条、打开一个下拉式菜单或于菜单的菜单项、子菜单或加一个名字。
MF_SEPARATOR:画一条水平区分线。此标志只被下拉式菜单、子菜单或快捷菜单使用。此区分线不能被变灰、无效或加亮。参数IpNewltem和uIDNewltem无用。
MF_STRING:指定菜单项是一个正文字符串;参数lpNewltem指向该字符串。
MF_UNCHECKED:不放置选取标记在菜单项旁边(缺省)。如果应用程序提供一个选取标记位图(参见SetMenultemBitmaps),则将选取标记位图放置在菜单项旁边
第三个参数:是菜单的标识符
第四个参数:是菜单的内容
对菜单的一些操作处理主要在消息过程函数的WM_COMMAND消息类型中,在WM_COMMAND中又根据AppendMenu中的第三个参数处理不同的信息
添加控件:添加控件可以利用CreateWindow来创建,当用来创建控件时,该函数的倒数第三个参数LPCWSTR lpszMenuName; 的意义发生了变化,表示了该控件的标识
CreateWindow如果第一个参数是一个,它指定了窗口的类名。这个类名可以是任何用函数RegisterClass注册的类名,或是任何预定义的控制类名
button按钮;edit 编辑框;ComboBox组合框;LitsBox列表框;MDIClient多文档界面;ScrollBar滚动条;static静态组件; msctls_trackbar32滑动条;msctls_progress32进度条;systabcontrol32分组框; systreeview32目录框,树行图
第三个参数指定创建窗口的风格,当创建控件的时候也可以可以指定控件风格。该参数可以是下列窗口风格的组合再加上说明部分的控制风格。风格意义:
WS_BORDER:创建一个带边框的窗口。
WS_CAPTION:创建一个有标题框的窗口(包括WS_BORDER风格)。
WS_CHILD:创建一个子窗口。这个风格不能与WS_POPUP风格合用。
WS_CHILDWINDOW:与WS_CHILD。
WS_CLIPCHILDREN:当在父内绘图时,排除子窗口区域。在创建父窗口时使用这个风格。
WS_CLIPSIBLINGS:排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口。如果未指定WS_CLIPSIBLINGS风格,并且子窗口是层叠的,则在重绘子窗口的客户区时,就会重绘邻近的子窗口。
WS_DISABLED:创建一个初始状态为禁止的子窗口。一个禁止状态的窗口不能接受来自用户的输入信息。
WS_DLGFRAME:创建一个带对话框边框风格的窗口。这种风格的窗口不能带标题条。
WS_GROUP:指定一组控制的第一个控制。这个控制组由第一个控制和随后定义的控制组成,自第二个控制开始每个控制,具有WS_GROUP风格,每个组的第一个控制带有WS_TABSTOP风格,从而使用户可以在组间移动。用户随后可以使用光标在组内的控制间改变键盘焦点。
WS_HSCROLL:创建一个有水平滚动条的窗口。
WS_ICONIC:创建一个初始状态为最小化状态的窗口。与WS_MINIMIZE风格相同。
WS_MAXIMIZE:创建一个初始状态为最大化状态的窗口。
WS_MAXIMIZEBOX:创建一个具有按钮的窗口。该风格不能与WS_EX_CONTEXTHELP风格同时出现,同时必须指定WS_SYSMENU风格。
WS_OVERLAPPED:产生一个层叠的窗口。一个层叠的窗口有一个标题条和一个边框。与WS_TILED风格相同。
WS_OVERLAPPEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口,与WS_TILEDWINDOW风格相同。
WS_POPUP:创建一个弹出式窗口。该风格不能与WS_CHILD风格同时使用。
WS_POPUPWINDOW:创建一个具有WS_BORDER,WS_POPUP,WS_SYSMENU风格的窗口,WS_CAPTION和WS_POPUPWINDOW必须同时设定才能使窗口某单可见。
WS_SIZEBOX:创建一个可调边框的窗口,与WS_THICKFRAME风格相同。
WS_SYSMENU:创建一个在标题条上带有的窗口,必须同时设定WS_CAPTION风格。
WS_TABSTOP:创建一个控制,这个控制在用户按下Tab键时可以获得键盘焦点。按下Tab键后使键盘焦点转移到下一具有WS_TABSTOP风格的控制。
WS_THICKFRAME:创建一个可调边框的窗口,与WS_SIZEBOX风格相同。
WS_TILED:产生一个层叠的窗口。一个层叠的窗口有一个标题和一个边框。与WS_OVERLAPPED风格相同。
WS_TILEDWINDOW:创建一个具有WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU, WS_THICKFRAME,WS_MINIMIZEBOX,WS_MAXIMIZEBOX风格的层叠窗口。与WS_OVERLAPPEDWINDOW风格相同。
WS_VISIBLE:创建一个初始状态为可见的窗口。
WS_VSCROLL:创建一个有垂直滚动条的窗口。
//点击窗口时候,鼠标点击的坐标(相对于客户区来说的)
int xPos = GET_X_LPARAM(lParam);
int yPos = GET_Y_LPARAM(lParam);
xPos = LOWORD(lParam);
yPos = HIWORD(lParam);