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

 
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...... ,将第一个参数修改为用户自己希望见到的主窗口标题
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.        GetWindowRect 和 GetClientRect 的区别
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 等工程
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 问题
今天在调试 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 ,否则不可能拆分窗口
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);
13.     FORMVIEW 切换失效问题
一个工程里有两个 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;
15.     改 ID 后出现的问题
昨天还好好程序,不知道改了什么突然不能运行了,但是可以编译通过,执行时候 点忽略出现   试图执行系统不支持的操作 的提示,单步调试,到了对话框的构造函数就出错。再跟进去看不懂了。调试半天也不知道那里出错。最后一 baidu ,原来是定义的 RICHEDIT 控件我给删除了,但是资源文件和其他文件中还有他的一些变量存在,问题就在这。
EDIT->FIND IN FILES
找到它的 ID ,然后删除就可以了。
同时注意,在好一部分后一定要记得保存,作好备份
  
                                           2006-9-22

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值