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