MFC之常用控件(四)
常用控件主要包括:静态文本框、编辑框、单选按钮、复选框、分组框、列表框、组合框、图片控件、列表控件、树形控件和进度条控件等等。本节教程先来讲解静态文本框的使用。
控件的通知消息
在将静态文本框的使用之前,先大概讲讲控件的通知消息。
当控件有事件发生时,它会向父窗口发送通知消息。最常发生的事件就是鼠标单击了,此时控件会向父窗口发送BN_CLICKED消息,实际上也就是给父窗口发送WM_COMMAND消息,在wParam参数中包含有通知消息码(鼠标单击时的通知消息码就是BN_CLICKED)和控件ID,lParam参数中包含了控件的句柄。在MFC消息映射机制概述中,鸡啄米讲过,消息就是由三个部分组成:消息值、wParam参数和lParam参数。
为控件通知消息添加消息映射和消息处理函数的方法,之前不止一遍讲过了。现在再来具体说明下,控件的消息映射宏的格式大致是:
ON_通知消息码(nID, memberFun)
nID参数是控件的ID,memberFun参数是消息处理函数名。例如,ON_BN_CLICKED(IDC_BUTTON1, &CDlg::OnBnClickedButton1)。此消息映射宏应添加到BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间。
消息处理函数声明的语法形式为:
afx_msg void memberFun();
静态文本框的使用
在前面鸡啄米的举例中,大家应该也清楚了静态文本框的一般作用,就是用于显示文字说明。MFC提供了CStatic类,封装了对静态文本框的所有操作。
如果我们想在程序中动态创建静态文本框,而不是像前面那样直接从Toolbox中拖到对话框模板上,那么就需要使用CStatic类的成员函数Create。Create函数的原型如下:
virtual BOOL Create(
LPCTSTR lpszText,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID = 0xffff
);
参数说明:
lpszText:指定要在控件中显示的文字。如果为NULL则不会显示任何文字。
dwStyle:指定静态控件的风格。静态文本框一般都是对话框或其他窗口的子窗口,而且是可见的,所以应该包含WS_CHILD 和WS_VISIBLE风格,另外,MSDN中说明,还可以为其设置“static control styles”中风格的任意组合。下面大概为大家说明几个风格:
SS_BITMAP | 一个位图将显示在静态控件中,Create函数的lpszText参数字符串是资源文件中定义的位图名。此风格忽略宽度和高度参数,静态控件自动调整它的尺寸来适应位图 |
SS_BLACKFRAME | 指定一个具有与窗口边界同色的框,默认为黑色 |
SS_BLACKRECT | 指定一个具有与窗口边界同色的实矩形,默认为黑色 |
SS_CENTER | 使显示的正文居中对齐,正文可以换行 |
SS_GRAYFRAME | 指定一个具有与屏幕背景同色的边框 |
SS_GRAYRECT | 指定一个具有与屏幕背景同色的实矩形 |
SS_ICON | 使控件显示一个在资源中定义的图标,图标的名字由Create 函数的lpszText 参数指定,图标自动调整它的尺寸 |
SS_LEFT | 左对齐正文,正文能回绕 |
SS_LEFTNOWORDWRAP | 左对齐正文,正文不能回绕 |
SS_NOTIFY | 使控件能向父窗口发送鼠标事件消息 |
SS_RIGHT | 右对齐正文,可以回绕 |
SS_SIMPLE | 使静态正文在运行时不能被改变并使正文显示在单行中 |
SS_WHITEFRAME | 指定一个具有与窗口背景同色的框,默认为白色 |
SS_WHITERECT | 指定一个具有与窗口背景同色的实心矩形,默认为白色 |
我们在对话框模板添加静态文本框时,可以在静态文本框的属性页中设置它的风格,很多都与上面的风格是对应的,例如,Simple属性就相当于SS_SIMPLE风格。
rect:指定静态控件的位置和大小,它可以是RECT结构体类型,也可以是CRect类的对象。
pParentWnd:指定静态控件的父窗口,通常是一个CDialog对象,不能是NULL。
nID:指定静态控件的ID。
CStatic类的成员函数简介
简单介绍下CStatic类的主要成员函数,下面是成员函数列表。
GetBitmap | 获取由SetBitmap函数设置的位图的句柄 |
GetCursor | 获取由SetCurSor设置的光标的句柄 |
GetEnhMetaFile | 获取由SetEnhMetaFile设置的增强图元文件的句柄 |
GetIcon | 获取由SetIcon设置的图标的句柄 |
SetBitmap | 设置要在静态控件中显示的位图 |
SetCursor | 设置要在静态控件中显示的光标图片 |
SetEnhMetaFile | 设置要在静态控件中显示的增强图元文件 |
SetIcon | 设置要在静态控件中显示的图标 |
除了上述成员函数外,由于CStatic是CWnd的派生类,CWnd的很多成员函数也可以使用,例如,GetWindowText、GetWindowRect、SetWindowText等。
编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本。在前面加法计算器的例子中已经演示了编辑框的基本应用。下面具体讲解编辑框的使用。
编辑框的通知消息
编辑框发生某些事件时会向父窗口发送通知消息。在对话框模板中的编辑框上点右键,选择“Add Event Handler”,为编辑框添加消息处理函数时,可以在“Message type”列表中看到这些消息。下面简单介绍编辑框的部分通知消息。
EN_CHANGE:编辑框的内容被用户改变了,与EN_UPDATE 不同,该消息是在编辑框显示的正文被刷新后才发出的
EN_ERRSPACE: 编辑框控件无法申请足够的动态内存来满足需要
EN_HSCROLL: 用户在水平滚动条上单击鼠标
EN_KILLFOCUS: 编辑框失去输入焦点
EN_MAXTEXT:输入的字符超过了规定的最大字符数。在没有ES_AUTOHSCROLL 或
ES_AUTOVSCROLL: 的编辑框中,当正文超出了编辑框的边框时也会发出该消息
EN_SETFOCUS: 编辑框获得输入焦点
EN_UPDATE: 在编辑框准备显示改变了的正文时发送该消息
EN_VSCROLL: 用户在垂直滚动条上单击鼠标
编辑框的创建
MFC为编辑框提供了CEdit类。编辑框的所有操作都封装到了CEdit类中。
与静态文本框的创建类似,除了可以在对话框模板上拖进一个编辑框,然后关联一个变量或通过API函数使用,也可以在程序中动态创建编辑框,即调用CEdit类的成员函数Create。Create成员函数的原型如下:
virtual BOOL Create(
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
参数说明:
dwStyle:指定编辑框的风格。可以是MSDN中“edit styles”包含风格的任意组合。下面是“edit styles”的所有风格说明。
ES_AUTOHSCROLL:当用户在行尾键入一个字符时,正文将自动向右滚动10 个字符,当用户按回车键时,正文总是滚向左边
ES_AUTOVSCROLL: 当用户在最后一个可见行按回车键时,正文向上滚动一页
ES_CENTER: 在多行编辑框中使正文居中
ES_LEFT :左对齐正文
ES_LOWERCASE: 把用户输入的字母统统转换成小写字母
ES_MULTILINE:指定一个多行编辑器。若多行编辑器不指定ES_AUTOHSCROLL 风格,则会自动换行,若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时
发出警告声响
ES_NOHIDESEL:默认时,当编辑框失去输入焦点后会隐藏所选的正文,当获得输入焦点时又显示出来。设置该风格可禁止这种默认行为
ES_NUMBER :编辑框中只允许输入数字
ES_OEMCONVERT:使编辑框中的正文可以在ANSI 字符集和OEM 字符集之间相互转换。这在编辑框中包含文件名时是很有用的
ES_PASSWORD: 使所有键入的字符都用“*”来显示
ES_READONLY: 将编辑框设置成只读的
ES_RIGHT :右对齐正文
ES_UPPERCASE: 把用户输入的字母统统转换成大写字母
ES_WANTRETURN:使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择默认的命令按钮,这往往会导致对话框的关闭
除了上面的风格外,编辑款一般还会设置WS_CHILD、WS_VISIBLE、WS_BORDER等窗口风格。另外,编辑框可以是多行的,也就是在编辑框中显示多行文字,这就需要设置ES_MULTILINE风格,如果想要多行编辑框支持回车键,则还要设置ES_WANTRETURN。
对于在对话框模板中创建的编辑框,它的属性中包含了上述的风格,例如,Multiline属性对应的就是ES_MULTILINE风格,Want Return属性对应ES_WANTRETURN风格。
其他三个参数与静态文本框的Create函数的参数类似,就不介绍了。
CEdit类的主要成员函数
使用编辑框最重要的莫过于,获取和设置编辑框中的正文,它们对应的成员函数分别是GetWindowText和SetWindowText,这两个函数都是继承自CWnd类的成员函数,另外,还可以使用CWnd类的GetWindowTextLength函数获取编辑框中正文的长度。
下面简单介绍CEdit类的其他几个主要的成员函数:
int LineFromChar(int nIndex = –1) const;
返回多行编辑框中指定索引的字符所在行的行号(从零开始),只适用于多行编辑框。nIndex等于-1则返回所选择正文的第一个字符所在行的索引。如果没有选择正文,则返回当前行的行号。
int LineIndex(int nLine = –1) const;
返回由nLine指定行的起始字符在编辑框的整个字符串中的索引,只适用于多行编辑框。如果指定行超过编辑框的最大行数,则返回-1,而如果nLine为-1,则返回当前插入符所在行的起始字符的索引。
void GetSel(int& nStartChar,int& nEndChar) const;
获取选择正文的索引范围。nStartChar返回被选择正文的起始索引,nEndChar返回被选择正文的终止索引(不包括在选择范围内)。如果没有选择正文,则两者均为当前插入符的索引。
void SetSel(int nStartChar,int nEndChar,BOOL bNoScroll=FALSE);
选择编辑框中的正文。nStartChar为选择开始处的索引,nEndChar为选择结束处的索引。如果nStartChar为0并且nEndChar为-1,则选择所有正文,而如果nStartChar为-1则取消所有选择。bNoScroll为FALSE时滚动插入符并使之可见,为TRUE时不滚动。
void ReplaceSel(LPCTSTR lpszNewText,BOOL bCanUndo = FALSE);
用lpszNewText指向的字符串来替换选择的正文。如果bCanUndo为TRUE则替换可以被撤销。
int GetLineCount() const;
获取正文的行数,只适用于多行编辑框。如果编辑框没有正文则返回1。
int LineLength( int nLine = –1 ) const;
获取指定字符索引所在行的字节长度(行尾的回车和换行符不计算在内),参数nLine 说明了为字符索引。如果nLine 的值为-1,则函数返回当前行的长度(假如没有正文被选择),或选择正文占据的行的字符总数减去选择正文的字符数(假如有正文被选择)。若用于单行编辑框,则函数返回整个正文的长度。
int GetLine( int nIndex, LPTSTR lpszBuffer ) const;
int GetLine( int nIndex, LPTSTR lpszBuffer, int nMaxLength ) const;
用来获得指定行的正文(不包括行尾的回车和换行符),只适用于多行编辑框。参数nIndex 是行号,lpszBuffer 指向存放正文的缓冲区,nMaxLength 规定了拷贝的最大字节数。若指定的行号小于编辑框的实际行数,函数返回实际拷贝的字节数,若指定的行号大于编辑框的实际行数,则函数返回0。需要注意的是,GetLine 函数不会在缓冲区中字符串的末尾添加字符串结束符(NULL)。
UINT GetLimitText( ) const;
获取编辑框能够接受的正文的最大字节数。
void LimitText(int nChars = 0);
设置用户在编辑框中可以输入的正文的最大长度(字节数)。如果nChars为0,则最大长度为UINT_MAX个字节。
CEdit类应用实例
下面鸡啄米为大家写一个简单的例子,来说明CEdit类的几个成员函数的使用方法。此例的功能是,首先在编辑框中显示一行正文,然后替换其中部分字符为另一个含有回车符的字符串,最终显示为两行正文。下面是简单的步骤介绍:
1.创建基于对话框的MFC程序,名称为“Example21”。
2.在自动生成的对话框模板IDD_EXAMPLE21_DIALOG中,删除静态文本框“TODO: Place dialog controls here.”,添加一个编辑框,ID设为IDC_MULTI_LINE_EDIT,属性Multiline设置为true。
3.为编辑框IDC_MULTI_LINE_EDIT添加CEdit类型的控件变量m_editMultiLine。
4.修改CExample21Dlg::OnInitDialog()函数为:
BOOL CMfcDemoDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
m_editMultiLine.SetWindowText(_T("我只是觉得,她不是坏人"));
m_editMultiLine.SetSel(3, 5); // 选择起始索引为3,终止索引为5(不包括在选择范围内)的正文,即“博客”
m_editMultiLine.ReplaceSel(_T("\r\n说什么呢啊"));
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
关于编辑框的介绍就到这里了。CEdit类成员函数的更详细的讲解可以查阅MSDN
按钮控件简介
按钮控件包括命令按钮(Button)、单选按钮(Radio Button)和复选框(Check Box)等。命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图。单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有一个被选中。
命令按钮是我们最熟悉也是最常用的一种按钮控件,而单选按钮和复选框都是一种比较特殊的按钮控件。单选按钮有选中和未选中两种状态,为选中状态时单选按钮中心会出现一个蓝点,以标识选中状态。一般的复选框也是有选中和未选中两种状态,选中时复选框内会增加一个“√”,而三态复选框(设置了BS_3STATE风格)有选中、未选中和不确定三种状态,不确定状态时复选框内出现一个灰色“√”。
按钮控件会向父窗口发送通知消息,最常用的通知消息莫过于BN_CLICKED和BN_DOUBLECLICKED了。用户在按钮上单击鼠标时会向父窗口发送BN_CLICKED消息,双击鼠标时发送BN_DOUBLECLICKED消息。
按钮控件的创建
MFC提供了CButton类封装按钮控件的所有操作。
之前的教程中,我们是在对话框模板上直接添加的按钮控件资源,但某些特殊情况下需要我们动态创建按钮控件,即通过CButton类的成员函数Create来创建按钮。下面是Create函数的原型:
virtual BOOL Create(
LPCTSTR lpszCaption,
DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd,
UINT nID
);
参数说明:
lpszCaption:指定按钮控件显示的文本。
dwStyle:指定按钮控件的风格,可以设置为以下按钮风格的任意组合。
BS_AUTOCHECKBOX :同BS_CHECKBOX,不过单击鼠标时按钮会自动反转
BS_AUTORADIOBUTTON: 同BS_RADIOBUTTON,不过单击鼠标时按钮会自动反转
BS_AUTO3STATE :同BS_3STATE,不过单击按钮时会改变状态
BS_CHECKBOX:指定在矩形按钮右侧带有标题的选择框
BS_DEFPUSHBUTTON:指定默认的命令按钮,这种按钮的周围有一个黑框,用户可以按回车键来快速选择该按钮
BS_GROUPBOX:指定一个组框
BS_LEFTTEXT:使控件的标题显示在按钮的左边
BS_OWNERDRAW:指定一个自绘式按钮
BS_PUSHBUTTON:指定一个命令按钮
BS_RADIOBUTTON:指定一个单选按钮,在圆按钮的右边显示正文
BS_3STATE:同BS_CHECKBOX,不过控件有3 种状态—选择、未选择和变灰
当然,除了以上列出的风格,一般还会为按钮设置WS_CHILD、WS_VISIBLE和WS_TABSTOP等风格,WS_TABSTOP风格使按钮控件具有tab停止属性,即按tab键切换焦点控件时能够将焦点停在按钮控件上。创建一组单选按钮时,第一个按钮的风格应设置为WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_GROUP|BS_AUTORADIOBUTTON,其他单选按钮的风格应为WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,不包含WS_TABSTOP和WS_GROUP。
在对话框模板上直接添加按钮控件时,它的属性中包含了上述风格,例如,复选框的Tri_state属性实际上代表的就是BS_3STATE风格。
剩下的三个参数与静态文本框的Create函数中的相应参数类似,大家可以参考前面静态文本框的讲解,也可以查阅MSDN。
CButton类的主要成员函数
下面是CButton类的一些主要的成员函数,至于其他的函数大家可以在MSDN中查看。
HBITMAP SetBitmap(HBITMAP hBitmap);
设置要在按钮中显示的位图。参数hBitmap为位图的句柄。返回值为按钮原来位图的句柄。
HBITMAP GetBitmap( ) const;
获取之前由SetBitmap函数设置的按钮位图的句柄。
void SetButtonStyle(UINT nStyle,BOOL bRedraw = TRUE);
设置按钮的风格。参数nStyle指定按钮的风格,bRedraw指定按钮是否重绘,为TRUE则重绘,否则不重绘,默认为重绘。
UINT GetButtonStyle( ) const;
获取按钮控件的风格。
void SetCheck(int nCheck);
设置按钮的选择状态。参数nCheck为0表示未选中状态,1表示选中状态,2表示不确定状态(仅用于复选框)。
int GetCheck( ) const;
获取按钮的选择状态。返回值的意义同SetCheck函数的nCheck参数。
HCURSOR SetCursor(HCURSOR hCursor);
设置要显示到按钮上的光标图。参数hCursor指定了光标的句柄。返回值为按钮原来光标的句柄。
HCURSOR GetCursor( );
获取之前由SetCursor设置的光标的句柄。
HICON SetIcon(HICON hIcon);
设置要在按钮上显示的图标。参数hIcon指定了图标的句柄。返回值为按钮原来图标的句柄。
HICON GetIcon( ) const;
获取之前由SetIcon设置的图标的句柄。
void SetState(BOOL bHighlight);
设置按钮的高亮状态。参数bHighlight指定按钮是否高亮显示,非0则高亮显示,否则取消高亮显示状态。
UINT GetState( ) const;
获取按钮控件的选择状态、高亮状态和焦点状态。我们可以通过将返回值与各个掩码相与来获得各种状态值,掩码与对应的相与结果说明如下:
掩码0x0003:用来获取单选按钮或复选框的状态。相与结果为0表示未选中,1表示被选中,2表示不确定状态(仅用于复选框)。
掩码0x0004:用来判断按钮是否是高亮显示。相与结果为非0值表示按钮是高亮显示的。当单击按钮并按住鼠标左键时,按钮会呈高亮显示。
掩码0x0008:相与结果为非零值表示按钮拥有输入焦点。
下面再列出几个继承自CWnd类的成员函数,通过它们获取或设置按钮控件的状态非常方便,只需要知道按钮的ID。
void CheckDlgButton(int nIDButton,UINT nCheck);
用来设置按钮的选择状态。参数nIDButton指定了按钮的ID。nCheck的值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。
UINT IsDlgButtonChecked(int nIDButton) const;
返回复选框或单选按钮的选择状态。返回值为0表示按钮未被选择,为1表示按钮被选择,为2表示按钮处于不确定状态(仅用于复选框)。
void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);
用来选择组中的一个单选按钮。参数nIDFirstButton指定了组中第一个按钮的ID,nIDLastButton指定了组中最后一个按钮的ID,nIDCheckButton指定了要选择的按钮的ID。
int GetCheckedRadioButton(int nIDFirstButton, int nIDLastButton);
用来获得一组单选按钮中被选中按钮的ID。参数nIDFirstButton 说明了组中第一个按钮的ID,nIDLastButton 说明了组中最后一个按钮的ID。
另外,CWnd类的成员函数GetWindowText()、SetWindowText()等也可以用来获取或设置按钮中显示的文本。
关于按钮控件Button、Radio Button和Check Box的使用基础就介绍到此.
http://www.jizhuomi.com/software/184.html
MFC之常用控件(四)的更多相关文章
- MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)
本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的侠义的 ...
- MFC编程入门之二十(常用控件:静态文本框)
上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组合框.图片控 ...
- 五、Android学习第四天补充——Android的常用控件(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 五.Android学习第四天补充——Android的常用控件 熟悉常用的A ...
- MFC学习 标签页与属性页及各常用控件使用
参考 http://blog.csdn.net/anye3000/article/details/6700023 CTabCtrl: BOOL CTabTestDlg::OnInitDialog() ...
- VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)
前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建.CTreeCtrl类的主要成员函数和应用实例. 树形控件的创建 MFC为树形控件提 ...
- VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)
言归正传,鸡啄米上一节中讲了编辑框的用法,本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box ...
- VS2010/MFC编程入门之二十(常用控件:静态文本框)
上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始鸡啄米将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组 ...
- VS2010/MFC编程入门之三十三(常用控件:标签控件Tab Control 下)
上一节中鸡啄米讲了标签控件知识的上半部分,本节继续讲下半部分. 标签控件的创建 MFC为标签控件的操作提供了CTabCtrl类. 与之前的控件类似,创建标签控件可以在对话框模板中直接拖入Tab Con ...
- 最全的基于MFC的ActiveX控件开发教程
浏览器插件之ActiveX开发(一) 一般的Web应用对于浏览器插件能不使用的建议尽量不使用,因为其涉及到安全问题以及影响用户安装(或自动下载注册安装)体验问题.在有特殊需求(如涉及数据安全的金融业务 ...
随机推荐
- [zt]不到最后一秒你永远不知道结局且震撼你心灵的高端电影
总有一部电影,让你憋着尿直到看完~~~ http://share.renren.com/share/230538513/17679574169?from=0101090202&shfrom=0 ...
- 发现未知字段 state ,过滤条件 [["state","not in",["draft"]]] 有误 的处理
通常该问题出现的原因在于对象定义的state字段在view中并没有出现,解决方案就是在view中添加该字段即可.
- 连接mysql遇到的问题
1. 首先使用一个用户名不行时,可以新建一个用户名点击用户,输入名和密码,此时一定要记住密码,别忘了.不过也可以点击编辑用户改.此时连接时发现还是连接不上.出现错误信息为: Access denied ...
- 【液晶模块系列基础视频】3.3fatfs接口函数的使用3
============================= 技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:ht ...
- 将url的查询参数解析成字典对象
1, 这个题目不约而同的出现在了多家公司的面试题中,当然也是因为太过于典型,解决方案无非就是拆字符或者用正则匹配来解决,我个人强烈建议用正则匹配,因为url允许用户随意输入,如果用拆字符的方式,有任何 ...
- 使用Android Studio和Genymotion模拟器搭建Andriod开发环境
一.Android Studio下载 1.打开http://www.android.com/ 2.依照下图步骤打开下载页面 a.在页脚部分点击“App Developer Resources” b.点 ...
- 设计模式学习系列9 外观模式Facade
1.概述 自己卖了一辆越野自行车,但毕竟不是自己定制的,买回来之后可能需要更改一下脚蹬,座皮,里程计数器或者刹车系统,假如将自行车看做一个整体系统,对我们而言使用的是自行车,然后我们对自己车构件的修改 ...
- ExtJS笔记5 Components
参考 :http://blog.csdn.net/zhangxin09/article/details/6914882 An Ext JS application's UI is made up of ...
- RT-Thread相同优先级线程的调度
/* 静态线程的 线程堆栈*/ ]; ]; /* 静态线程的 线程控制块 */ static struct rt_thread thread_test1; static struct rt_threa ...
- 读取C#AssemblyInfo文件中的AssemblyVersion中的值
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 1.程序集的版本信息由下面四个值组成:主 ...