最近想学多一点,所以拿win32来玩了一下。
最初很纳闷win32怎样摆控件的,看了很多程序,明白了,除了系统已经设定好的系统控件button,edit,list box等,所有的控件都得在这几个基本控件上靠自己组合写成新的控件。
普通界面
首先,生成界面,肯定要用RegisterClassEx注册一个界面类,这个类里面包含了一些控件界面的基本信息,然后在调用CreateWindow把控件生成出来,如果想生成一个Windows窗口界面,则跟着还需要调用 ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
来显示Windows窗口界面。
hWnd为此窗口的全局句柄,所有的子控件都得依附其用CreateWindow生成,举个生成button的例子:
hWndStartbutton = CreateWindow(_T("button"),_T("开始"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
2,2,100,25,hWnd,(HMENU)1,((LPCREATESTRUCT)lParam)->hInstance, NULL);参数分别为:在系统里注册控件的名(如果是系统控件,系统默认就给其注册了),控件界面所显示的文字,控件样式,位置x,位置y,宽,高,Windows界面句柄,控件的ID,整个进程的句柄。
如果想改变控件字体,则首先通过CreateFontIndirect生成一个字体结构,具体如:
LOGFONT logfont;
ZeroMemory(&logfont,sizeof(LOGFONT));
logfont.lfCharSet = GB2312_CHARSET;
logfont.lfHeight = -12;
_tcscpy(logfont.lfFaceName,_T("宋体"));
hFont = CreateFontIndirect(&logfont);
然后用 SendMessage(hWndStartbutton, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE,0) )发消息到控件上,改变控件的字体。
最初很纳闷win32怎样摆控件的,看了很多程序,明白了,除了系统已经设定好的系统控件button,edit,list box等,所有的控件都得在这几个基本控件上靠自己组合写成新的控件。
普通界面
首先,生成界面,肯定要用RegisterClassEx注册一个界面类,这个类里面包含了一些控件界面的基本信息,然后在调用CreateWindow把控件生成出来,如果想生成一个Windows窗口界面,则跟着还需要调用 ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
来显示Windows窗口界面。
hWnd为此窗口的全局句柄,所有的子控件都得依附其用CreateWindow生成,举个生成button的例子:
hWndStartbutton = CreateWindow(_T("button"),_T("开始"),WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
2,2,100,25,hWnd,(HMENU)1,((LPCREATESTRUCT)lParam)->hInstance, NULL);参数分别为:在系统里注册控件的名(如果是系统控件,系统默认就给其注册了),控件界面所显示的文字,控件样式,位置x,位置y,宽,高,Windows界面句柄,控件的ID,整个进程的句柄。
如果想改变控件字体,则首先通过CreateFontIndirect生成一个字体结构,具体如:
LOGFONT logfont;
ZeroMemory(&logfont,sizeof(LOGFONT));
logfont.lfCharSet = GB2312_CHARSET;
logfont.lfHeight = -12;
_tcscpy(logfont.lfFaceName,_T("宋体"));
hFont = CreateFontIndirect(&logfont);
然后用 SendMessage(hWndStartbutton, WM_SETFONT, (WPARAM)hFont, MAKELPARAM(TRUE,0) )发消息到控件上,改变控件的字体。
自定义控件
注册一个控件类,绑定好处理消息函数,在消息处理函数中,处理WM_PAINT时绘画控件,处理WM_COMMAND时,根据用户传来的不同的WPARAM wParam, LPARAM lParam值,作出相应的操作处理。
使用控件的注意:
1、CEdit或Edit Control中获取其文本信息,LRESULT lret = SendMessage(tccHWND->hwndEdit, EM_GETLINE , (WPARAM)NULL, (LPARAM)_filterip);在_filterip这个获取文本数组的第一位_filterip[0]必须要设置为数组的长度才能获取文本信息。
2、在Combox Control中必须要按下下拉按钮把下拉范围拉大才能看见你加进去的内容。