关于ListCtrl,RichEdit和程序框架的一些东东

来源:互联网 发布:php初学者项目 编辑:程序博客网 时间:2024/05/16 15:17
 
1.        修改程序主窗口的标题
1.APP 对应的 cpp文件中的InitInstance()函数中添加
AfxGetMainWnd()->SetWindowText(
"test");就将主窗口标题改成了test(即将DownQueue 改成了test )
DOC.cppOnNewDocument()函数中添加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;
3.        GetWindowRectGetClientRect 的区别
Test文件夹的WindowRect 工程里,以view.cpp为例子说明。View指的就是白色的区域.这两个函数是静态函数,可以用指针调用,也可以直接调用。
GetWindowRect()
得到的结果是屏幕坐标,即view视图在屏幕上的绝对坐标。如将窗口拖到屏幕最下面,刚好把白色区域完全覆盖,你可以看到top 的值是768,即分辨率的大小。
GetClientRect()
得到的是客户区的坐标,即得到的是客户区的大小,它不管窗口位于什么位置,它给出的值就是客户区的大小。其left,top值为0right,bottom值就是其宽度,高度。即整个白色区域就是一个系统,不受别的窗口、不受窗口位置的影响。如你把白色区域拖到屏幕最下面,完全看不见,会发现top值仍为0.
GetCLientRect
后用ClientToScreen,你会发现值比直接GETWINDOWRECT四周都小2这个2应该是边框的宽度
4.        控件自动调整大小:

5.        控件背景色的设置:

6.        控制选择文本的输出风格:
//
以上三条可以参照DOWNQUEUELOGSEARCH等工程
7.        修改FORMVIEW初始大小
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));
9.        FORMVIEW切换问题:
pOldView->ShowWindow(SW_HIDE); //
隐藏旧的
pNewView->ShowWindow(SW_SHOW); //
显示新的
SetActiveView(pNewView); //
将新视图设为活动视图
10.     Assertion问题
今天在调试LISTCTRLRICHEDIT输出问题时候,基本上整个COPY的是SPLIT项目的代码,可是出现了Debug Assertion Failed@ File:afxmn.inl   Line: 605 问题,BAIDU了之后,大部分说是对象没有初始化,指针没有赋值等等问题,对照程序,我好象并没有少这部分内容。后来才发现,RICHEDIT控件我定义了一个变量,后来给它删除了,然后又定义一个,名字和前一次取的一样,这样在.H文件中出现了两次定义,然而编译时候竟然没报错(奇怪).把这个删除了,重新定义一个不同的变量,然后改代码变量名字REBUILDOK

注:在写程序时候,按向导生成的变量名,函数名最好不要动,而且要及时做好备份.单步调试到m_RichEdit.GetLineCount()时候,出错,所以可以想象到是m_RichEdit出问题。
11.     拆分窗口问题
OnCreateClient()
函数中,默认最后一行是return (,pContext),在重载完该函数时候,要把最后一行给注释掉,改成ruturn true,否则不可能拆分窗口
12.     LISTCTRL列宽成比例问题
listctrl
控件宽度随formview 大小而改变,即宽在formview的宽大小成比例的实现:重载OnSize,当框架改变时,重新创建Column,使宽度等于CListCtrl1/3,当然ClistCtrl的数据也要刷新
LV_COLUMN lvCol;...
lvCol.cx = CListCtrl
1/3;   //只占1/3
...
m_List.InsertColumn(n, &lvCol);
13.     FORMVIEW切换失效问题
一个工程里有两个formview,根据需要来切换它们,已获得一个formview的指针,用ShowWindow来显示它,已成功,但想同时激活它,用SetFocus或给它发消息都未成功,但只要用鼠标点它即可。
回答: 我的问题已解决了,CMultiViewSplitter分割了主窗口,(00)(01),然后在(01)里切换formview1,formview2,如果想激活formview,可以用wndSplitter.SetActivePane(0,1);即可。
14.     关于mainfrme问题
菜单,边框是属于CMainFrame的。要去掉菜单在CMainFrame::OnCreate SetMenu(NULL);
去掉边框在 CMainFrame::PreCreateWindow
cs.style &= WS_BORDER;
15.     ID后出现的问题
昨天还好好程序,不知道改了什么突然不能运行了,但是可以编译通过,执行时候点忽略出现 试图执行系统不支持的操作的提示,单步调试,到了对话框的构造函数就出错。再跟进去看不懂了。调试半天也不知道那里出错。最后一baidu ,原来是定义的RICHEDIT控件我给删除了,但是资源文件和其他文件中还有他的一些变量存在,问题就在这。
EDIT->FIND IN FILES
找到它的ID,然后删除就可以了。
同时注意,在好一部分后一定要记得保存,作好备份
  
                                           2006-9-22

 
原创粉丝点击