VC++2012为什么我用CREATEWINDOW创建的EDIT控件只能输入数字,其它都不可以

VC++2012为什么我用CREATEWINDOW创建的EDIT控件只能输入数字,其它都不可以,第1张

《Windows程序设计》这本书很好,C+API+VCRC文件由VC维护,我们只需要在VC界面插入资源,某些特殊情况下,也可以自己用记事本打开RC文件进行修改。1.创建主窗口,myclassname是自己用WNDCLASS注册的类名//参数依次是:类名-窗口标题-窗口样式-x-y-width-height-父窗口-菜单ID-实笑伍旁例句柄-CREATESTURCT指针hwnd=CreateWindow(TEXT("myclassname"),TEXT("未命名"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL)2.创建子窗口:必须有WS_CHILD样式,必须指定父窗口/碰橡/editstaticbuttonlistbox是系统预先定义好的类名//对button指定不同的样式,可有单选按钮、多选按钮、复选框等等形式//对static指定不同的样式,可显示矩形区域、静态文字、加载图标、位图等CreateWindow(TEXT("edit"),TEXT("ES_LEFT"),WS_CHILD|WS_VISIBLE|WS_VSCROLL|ES_MULTILINE|ES_LEFT,0,0,cxChar*20,2*cyChar,hwnd,(HMENU)12,hInst,NULL)CreateWindow(TEXT("button"),TEXT("GROUPBOX"),WS_CHILD|WS_VISIBLE|BS_GROUPBOX,0,3*cyChar,60,4*cyChar,hwnd,(HMENU)0,hInst,NULL)CreateWindow(TEXT("button"),TEXT("RADIOBUTTON"),WS_CHILD|WS_VISIBLE|BS_RADIOBUTTON,0,8*cyChar,60,cyChar,hwnd,(HMENU)1,hInst,NULL)CreateWindow(TEXT("button"),TEXT("AUTORADIOBUTTON"),WS_CHILD|WS_VISIBLE|BS_AUTORADIOBUTTON,0,10*cyChar,60,cyChar,hwnd,(HMENU)2,hInst,NULL)CreateWindow(TEXT("button"),TEXT("AUTOCHECKBOX"),WS_CHILD|WS_VISIBLE|BS_AUTOCHECKBOX,0,12*cyChar,12*cxChar,cyChar,hwnd,(HMENU)3,hInst,NULL)CreateWindow(TEXT("button"),TEXT("CHECKBOX"),WS_CHILD|WS_VISIBLE|BS_CHECKBOX,0,14*cyChar,12*cxChar,cyChar,hwnd,(HMENU)4,hInst,NULL)CreateWindow(TEXT("button"),TEXT("3STATE"),WS_CHILD|WS_VISIBLE|BS_3STATE,0,16*cyChar,12*cxChar,cyChar,hwnd,(HMENU)5,hInst,NULL)CreateWindow(TEXT("button"),TEXT("AUTO3STATE"),WS_CHILD|WS_VISIBLE|BS_AUTO3STATE,0,18*cyChar,12*cxChar,cyChar,hwnd,(HMENU)6,hInst,NULL)CreateWindow(TEXT("button"),TEXT("PUSHBUTTON"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,0,20*cyChar,12*cxChar,cyChar,hwnd,(HMENU)7,hInst,NULL)CreateWindow(TEXT("button"),TEXT("DEFPUSHBUTTON"),WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,0,22*cyChar,12*cxChar,cyChar,hwnd,(HMENU)8,hInst,NULL)CreateWindow(TEXT("static"橘清),TEXT("SS_LEFT"),WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|SS_LEFT,0,24*cyChar,12*cxChar,cyChar,hwnd,(HMENU)9,hInst,NULL)CreateWindow(TEXT("static"),TEXT("SS_BLACKRECT"),WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|SS_BLACKRECT,0,26*cyChar,12*cxChar,cyChar,hwnd,(HMENU)10,hInst,NULL)CreateWindow(TEXT("static"),TEXT("SS_BLACKFRAME"),WS_CHILD|WS_VISIBLE|ES_AUTOHSCROLL|SS_BLACKFRAME,0,28*cyChar,12*cxChar,cyChar,hwnd,(HMENU)11,hInst,NULL)

你如果只是在内存中 *** 作,不需要存到文件、数据库中,就直接建立一个全局List<对象>就行了。但一关页面你输入的内容就不能只在了。

内存中的例子。

1、根据你的datagridview建立一者伍信个model class。

public class Student

{

public string Name{getset}

public string Sex{getset}

public DateTIme Birthday{getset}

public string Job {getset}

public string Tel{getset}

}

2、在你的这个窗体Form中加一个全局List对象

private List<Student>MainDB = new List<Student>()

3、在你的Form_Load中把这个数组初使化一下,安全点

4、你的[完成]按钮_Click中加你List的Add了。把输入的内容加到List中

protected void 完成按钮名称_Click事件(object obj, EventArgs e)

{

Student obj = new Student()

obj.Name = 你姓名文件框的值

obj.Sex = 性别下拉框的值

......

MainDB.Add(obj)

}

5、查询按钮事件了....

protected void 查询按钮名称_Click事件(object obj, EventArgs e)

{

//取查询条件框中的值

string name = 查橘启询文本框.Text.Trim()

var obj = List.Where(a=>a.Name.Contains(name)).FirstOrDefault()/首轮/Lambda查询

datagridview1.DataSource = obj

}

==============以上是内存的方法=======

如果你非要存数据库,就是在完成按钮中你要加写入Insert。查询中就要读出Select。

当然你还可以序列化到xml中,或存json

造成的原因是,Groupbox先画矩形,然森悉后把文本画上。当文本的背景不透明时,文本可以覆盖掉下面的横线。当透明的时候,就不能覆盖了。

解决办法很多种。

最好的办法是重载CStatic,重绘GroupBox。这种方法简单些,但是,如果客户采用了不同的桌面主题,或者使用了不同的界面风格,得不到体现,因为都还是你画的样子。

还有一种比较复杂的方法。

在背景被擦除前,先准备一张位图(大小和GroupBox一样大,可以GetWindowRect得到),准备一个内存DC,将位图选入该DC。然后向GroupBox发送壹条WM_PAINT消息,但是传递该DC做参数,这样做的目的是,引发GroupBox重绘,但是让它把此耐乎自己画到这个位图中而不是屏幕上。

背景被重会后,截取文亩坦本的那个块,BitBlt到对应位置。这种方法的好处是,如果客户使用Vista或者XP等不同的风格的界面,系统都会用原先的界面界面风格画上,只是背景透明了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8179418.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存