关于ListCtrl,RichEdit和程序框架的一些东东
来源:互联网 发布:php初学者项目 编辑:程序博客网 时间:2024/05/16 15:17
1. 修改程序主窗口的标题
法1.在APP 对应的 cpp文件中的InitInstance()函数中添加
AfxGetMainWnd()->SetWindowText("test");就将主窗口标题改成了test。(即将DownQueue 改成了test )
在DOC.cpp中OnNewDocument()函数中添加CDocument::SetTitle("123")语句,就可以将无标题三个字改成123
法2.将项目工作区转换到Resource View 面板,选择串表(String Table)资源,在String Table中双击IDR_MAINFRAME项,caption中显示一字符串xx yy......,将第一个参数修改为用户自己希望见到的主窗口标题
法1.在APP 对应的 cpp文件中的InitInstance()函数中添加
AfxGetMainWnd()->SetWindowText("test");就将主窗口标题改成了test。(即将DownQueue 改成了test )
在DOC.cpp中OnNewDocument()函数中添加CDocument::SetTitle("123")语句,就可以将无标题三个字改成123
法2.将项目工作区转换到Resource View 面板,选择串表(String Table)资源,在String Table中双击IDR_MAINFRAME项,caption中显示一字符串xx yy......,将第一个参数修改为用户自己希望见到的主窗口标题
2. 获取当前活动的窗口标题
HWND hWnd = GetActiveWindow();
int nlen = GetWindowTextLength(hWnd) + 1;
LPTSTR lptitle = new TCHAR[nlen];
memset(lptitle, 0, nlen);
GetWindowText(hWnd, lptitle ,nlen);
//使用完成后
delete []lptitle;
HWND hWnd = GetActiveWindow();
int nlen = GetWindowTextLength(hWnd) + 1;
LPTSTR lptitle = new TCHAR[nlen];
memset(lptitle, 0, nlen);
GetWindowText(hWnd, lptitle ,nlen);
//使用完成后
delete []lptitle;
3. GetWindowRect和GetClientRect 的区别
在Test文件夹的WindowRect 工程里,以view.cpp为例子说明。View指的就是白色的区域.这两个函数是静态函数,可以用指针调用,也可以直接调用。
GetWindowRect()得到的结果是屏幕坐标,即view视图在屏幕上的绝对坐标。如将窗口拖到屏幕最下面,刚好把白色区域完全覆盖,你可以看到top 的值是768,即分辨率的大小。
GetClientRect()得到的是客户区的坐标,即得到的是客户区的大小,它不管窗口位于什么位置,它给出的值就是客户区的大小。其left,top值为0,right,bottom值就是其宽度,高度。即整个白色区域就是一个系统,不受别的窗口、不受窗口位置的影响。如你把白色区域拖到屏幕最下面,完全看不见,会发现top值仍为0.
GetCLientRect后用ClientToScreen,你会发现值比直接GETWINDOWRECT四周都小2,这个2应该是边框的宽度。
在Test文件夹的WindowRect 工程里,以view.cpp为例子说明。View指的就是白色的区域.这两个函数是静态函数,可以用指针调用,也可以直接调用。
GetWindowRect()得到的结果是屏幕坐标,即view视图在屏幕上的绝对坐标。如将窗口拖到屏幕最下面,刚好把白色区域完全覆盖,你可以看到top 的值是768,即分辨率的大小。
GetClientRect()得到的是客户区的坐标,即得到的是客户区的大小,它不管窗口位于什么位置,它给出的值就是客户区的大小。其left,top值为0,right,bottom值就是其宽度,高度。即整个白色区域就是一个系统,不受别的窗口、不受窗口位置的影响。如你把白色区域拖到屏幕最下面,完全看不见,会发现top值仍为0.
GetCLientRect后用ClientToScreen,你会发现值比直接GETWINDOWRECT四周都小2,这个2应该是边框的宽度。
4. 控件自动调整大小:
5. 控件背景色的设置:
6. 控制选择文本的输出风格:
//以上三条可以参照DOWNQUEUE,LOGSEARCH等工程
//以上三条可以参照DOWNQUEUE,LOGSEARCH等工程
7. 修改FORMVIEW初始大小:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.cx = 800;
cs.cy = 600;
....
}
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.cx = 800;
cs.cy = 600;
....
}
8. 修改FORMVIEW背景色的语句:
pDC->SetBkColor (RGB(236,233,216));
或dc.SetBkMode (RGB(236,233,216));
pDC->SetBkColor (RGB(236,233,216));
或dc.SetBkMode (RGB(236,233,216));
9. FORMVIEW切换问题:
pOldView->ShowWindow(SW_HIDE); //隐藏旧的
pNewView->ShowWindow(SW_SHOW); //显示新的
SetActiveView(pNewView); //将新视图设为活动视图
pOldView->ShowWindow(SW_HIDE); //隐藏旧的
pNewView->ShowWindow(SW_SHOW); //显示新的
SetActiveView(pNewView); //将新视图设为活动视图
10. Assertion问题
今天在调试LISTCTRL往RICHEDIT输出问题时候,基本上整个COPY的是SPLIT项目的代码,可是出现了Debug Assertion Failed@ File:afxmn.inl Line: 605 问题,BAIDU了之后,大部分说是对象没有初始化,指针没有赋值等等问题,对照程序,我好象并没有少这部分内容。后来才发现,RICHEDIT控件我定义了一个变量,后来给它删除了,然后又定义一个,名字和前一次取的一样,这样在.H文件中出现了两次定义,然而编译时候竟然没报错(奇怪).把这个删除了,重新定义一个不同的变量,然后改代码变量名字REBUILD就OK了
注:在写程序时候,按向导生成的变量名,函数名最好不要动,而且要及时做好备份.单步调试到m_RichEdit.GetLineCount()时候,出错,所以可以想象到是m_RichEdit出问题。
今天在调试LISTCTRL往RICHEDIT输出问题时候,基本上整个COPY的是SPLIT项目的代码,可是出现了Debug Assertion Failed@ File:afxmn.inl Line: 605 问题,BAIDU了之后,大部分说是对象没有初始化,指针没有赋值等等问题,对照程序,我好象并没有少这部分内容。后来才发现,RICHEDIT控件我定义了一个变量,后来给它删除了,然后又定义一个,名字和前一次取的一样,这样在.H文件中出现了两次定义,然而编译时候竟然没报错(奇怪).把这个删除了,重新定义一个不同的变量,然后改代码变量名字REBUILD就OK了
注:在写程序时候,按向导生成的变量名,函数名最好不要动,而且要及时做好备份.单步调试到m_RichEdit.GetLineCount()时候,出错,所以可以想象到是m_RichEdit出问题。
11. 拆分窗口问题
OnCreateClient()函数中,默认最后一行是return (,pContext),在重载完该函数时候,要把最后一行给注释掉,改成ruturn true,否则不可能拆分窗口
OnCreateClient()函数中,默认最后一行是return (,pContext),在重载完该函数时候,要把最后一行给注释掉,改成ruturn true,否则不可能拆分窗口
12. LISTCTRL列宽成比例问题
listctrl控件宽度随formview 大小而改变,即宽在formview的宽大小成比例的实现:重载OnSize,当框架改变时,重新创建Column,使宽度等于CListCtrl的1/3,当然ClistCtrl的数据也要刷新
LV_COLUMN lvCol;...
lvCol.cx = CListCtrl的1/3; //只占1/3
...
m_List.InsertColumn(n, &lvCol);
listctrl控件宽度随formview 大小而改变,即宽在formview的宽大小成比例的实现:重载OnSize,当框架改变时,重新创建Column,使宽度等于CListCtrl的1/3,当然ClistCtrl的数据也要刷新
LV_COLUMN lvCol;...
lvCol.cx = CListCtrl的1/3; //只占1/3
...
m_List.InsertColumn(n, &lvCol);
13. FORMVIEW切换失效问题
一个工程里有两个formview,根据需要来切换它们,已获得一个formview的指针,用ShowWindow来显示它,已成功,但想同时激活它,用SetFocus或给它发消息都未成功,但只要用鼠标点它即可。
回答: 我的问题已解决了,CMultiViewSplitter分割了主窗口,(0,0)(0,1),然后在(0,1)里切换formview1,formview2,如果想激活formview,可以用wndSplitter.SetActivePane(0,1);即可。
一个工程里有两个formview,根据需要来切换它们,已获得一个formview的指针,用ShowWindow来显示它,已成功,但想同时激活它,用SetFocus或给它发消息都未成功,但只要用鼠标点它即可。
回答: 我的问题已解决了,CMultiViewSplitter分割了主窗口,(0,0)(0,1),然后在(0,1)里切换formview1,formview2,如果想激活formview,可以用wndSplitter.SetActivePane(0,1);即可。
14. 关于mainfrme问题
菜单,边框是属于CMainFrame的。要去掉菜单在CMainFrame::OnCreate中 SetMenu(NULL);
去掉边框在 CMainFrame::PreCreateWindow中
cs.style &= WS_BORDER;
菜单,边框是属于CMainFrame的。要去掉菜单在CMainFrame::OnCreate中 SetMenu(NULL);
去掉边框在 CMainFrame::PreCreateWindow中
cs.style &= WS_BORDER;
15. 改ID后出现的问题
昨天还好好程序,不知道改了什么突然不能运行了,但是可以编译通过,执行时候点忽略出现 试图执行系统不支持的操作的提示,单步调试,到了对话框的构造函数就出错。再跟进去看不懂了。调试半天也不知道那里出错。最后一baidu ,原来是定义的RICHEDIT控件我给删除了,但是资源文件和其他文件中还有他的一些变量存在,问题就在这。
EDIT->FIND IN FILES 找到它的ID,然后删除就可以了。
同时注意,在好一部分后一定要记得保存,作好备份
昨天还好好程序,不知道改了什么突然不能运行了,但是可以编译通过,执行时候点忽略出现 试图执行系统不支持的操作的提示,单步调试,到了对话框的构造函数就出错。再跟进去看不懂了。调试半天也不知道那里出错。最后一baidu ,原来是定义的RICHEDIT控件我给删除了,但是资源文件和其他文件中还有他的一些变量存在,问题就在这。
EDIT->FIND IN FILES 找到它的ID,然后删除就可以了。
同时注意,在好一部分后一定要记得保存,作好备份
2006-9-22
- 关于ListCtrl,RichEdit和程序框架的一些东东
- 关于IPC$的一些东东
- 关于WPF的一些东东
- 关于一些内存的东东
- 关于Latex的一些东东
- 一些关于视图的东东
- 关于线程的一些东东
- 关于UG925的一些东东
- 关于RichEdit控件的一些资料
- 关于ListCtrl控件的一些用法
- 关于 回调函数 的一些东东
- 关于SerialPort类的一些东东
- 关于windows登陆的一些东东、
- 关于MFC的一些东东(转载)
- 关于ImageRvaToVa与SEC_IMAGE的一些东东
- 一些关于网游服务器的东东
- 关于网络编程一些莫名的东东
- 关于qt的一些小东东
- 架构师已死
- 给一段软件公司求职对白,供想要求职的软件开发人员参考
- RecurringNumbers (google code jam china 1000分真题)
- 开博了
- ASP.NET初体验 测试示例
- 关于ListCtrl,RichEdit和程序框架的一些东东
- 程序员的灯下黑:坚持和良好心态近乎道
- 软件文档--扬弃还是传承 (原文最终修订于 2006-04-12,上午12:41:14)
- CFont的问题和一个郁闷我两天的Commobox背景色的问题
- 搜索通配符字符的说明
- Windows消息大全
- Eclipse 插件功能详解大全
- 体会SALES的“三个代表”
- 深入剖析JSP和Servlet对中文的处理过程