还是先上图:
做了一个简单的搜索框,并注册了窗口类u14SearchBox。有兴趣的可以拿去,拓展一下,做成一个漂亮的!下面先讲一下原理,稍后再讲怎样美化界面
其实这个搜索框,由是两个控件组成,一个文本框,一个按钮。但是它们不是孤立的,而是整合到一个窗口中了,外部是无法直接控制这两个控件的!
当然,我们只需要一个“容器”能装得下这两个控件,所以就从CWnd直接派生啦。
然后第一个事情就是写一个供外部调用动态创建的create函数,很简单,看了附件就知道了。唯一需要注意的就是,rcLayout参数的后两个right、bottom属性,right代表窗口的宽度,而bottom应设为NULL,因为高度是默认不可更改的(始终为24)
如果需要更改窗口类名的话,就在PreCreateWindow中修改(当然,我尝试过,也只有在这里改才能生效!)
把其中默认的代码替换成如下的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | WNDCLASS wndcls; memset(&wndcls, 0, sizeof(WNDCLASS)); // start with NULL // defaults wndcls.style = CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW | CS_NOCLOSE; //you can specify your own window procedure wndcls.lpfnWndProc = ::DefWindowProc; wndcls.hInstance = AfxGetInstanceHandle(); wndcls.hIcon = NULL; // or load a different icon wndcls.hCursor =NULL; wndcls.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); wndcls.lpszMenuName = NULL; // Specify your own class name for using FindWindow later wndcls.lpszClassName = _T("u14SearchBox"); // Register the new class and exit if it fails if(!AfxRegisterClass(&wndcls)) { TRACE("Class Registration Failed\n"); return FALSE; } cs.lpszClass = wndcls.lpszClassName; return TRUE; |
改变类名就在这一行啦:wndcls.lpszClassName = _T(“u14SearchBox”)
当然不改变类名,系统也会给你分配一个,但是为了让你的产品都打上自己的标签,还是修改一下吧!
由于Create中创建的两控件的大小都为0。当然,此时也不可能获得窗口的大小,所以也只能设为0了!而需要显示,以至于调整大小时两控件都能跟着变,就应该在OnSize中处理了!
下面讲一下怎样在程序主窗口中响应开始搜索的事件(也就是按下搜索按钮)
其实很简单,只要在Cu14SearchBox中添加对按钮控件消息的响应(当然这时只能手工添加了),然后发送消息到主窗口,也就是Cu14SearchBox对象的父窗口,由它来处理就行了!
最后是界面如何美化的问题。
我在例子中,只实现了最简单的界面。只在OnNcPaint里面画了一个填充白色,黑色边框的矩形框而已。大家可以把这段代码修改成,直接绘制一个图片,而可以在OnFocus里面改变成另外一幅图片。
Edit控件就不需要修改了,它反正都是没有边框的,一般用户也看不出来,这里面还藏了一个文本框
搜索按钮的美化,要么可以靠自绘控件实现,要么就把按钮控件取消掉,由一个图片控件代替,或者干脆就直接在这个区域中绘图!
附件下载:


API和MFC混用啦
而且我贴的这段也是从网上Copy来的
这是C++?怎么感觉和C#差很远?
本来就差得很远
下来看看,支持支持你!
這個searchbox是search網上的還是什麼的?
不是实现功能的,只是实现界面的
哦。。。GUI什麼的麼?
就相当于博客前台与后台的区别
知道了的說,話說桌面端什麼的完全不會,不過原理應該都差不多的說
看不懂,这两天博客空间折腾来折腾去的,现在过来冒泡
折腾什么呢?更换主题?
虚拟主机和VPS然后插件和主题,问题一个接一个
来看看…
当初学C++都没学好,现在都不感兴趣了。在学PHP进行中……
C++基础和工程开发是两码事,做项目可有趣多了
任何一个东西,只要肯深入,肯定会有好的结果的!
西瓜哥真是厉害啊
过奖
还用C++写搜索框,真是厉害啊!
你现在看到的只是一个最基本的雏形,还没有进行任何的美化
MFC太多C的东西了,例如TRUE、FALSE,C++就有原生支持了。
另外中文软件的字符串为什么不直接写L”"?
但是同时使用MFC的库和C++标准库,就会把程序搞大呀!有时候,我宁愿用CMap也不用map
我也一样~~假如框架有,就不必用STL了
其实我觉得MFC引用了很多C里面的东西,也是图个简便,少改一些东西
还有,自己实现了很多STL里的东西,原因是MFC在STL之前就已经实现了这些东西
不知道你用的网盘怎么样??
还行,我终于快赚到1块钱了
还差4块钱,就可以结账了
瓜弟。。为神马前段时间 博客挂了。。。求解。。。
这只能问空间商了!我正在考虑到期之后要不要换一个空间商
可以考虑。。。
支持API么!!?
只能供MFC/ATL程序使用
高手的作品
这只是一个半成品
没怎么看懂啊,有什么用处吗
回访中……
好多的西瓜啊。。果然是西瓜哥。。
原来是这样做。
但是 还没学过。
以后在折腾
你输入XXOO,它现在只能弹出一个消息框,写着“XXOO”
瓜哥厉害,
虽然有奉承我的嫌疑,不过还是谢谢啦
瓜哥,我路过
你好久没来了,最近忙什么呢?
公司实习。。。
实了几个月了?应该比在学校轻松吧?
瓜哥,顶你,看到你博客里那些西瓜就想笑,正在笑~
C瓜哥是代码哥 小生弱弱地飘过。。。
额,这是什么框架啊?
不是框架,只是个窗体
哇。我是外行。。。
C++,我只会三个词,封装,继承,多态。呵呵
已经不错了
界面美化一直以来就很少接触,多到你这里学习学习
搞界面开发还不如搞游戏开发,搞游戏开发的人都很擅长做界面
瓜瓜好牛逼啊