您的位置:首页 > 其它

孙鑫vc视频教程笔记(二)

2008-11-07 23:52 316 查看
1. 当在vc++中预览一个窗口,出现无法关闭窗口的情况时:使用快捷键:Ctrl+PauseBreak
2. VC中出现类丢失的情况,可以删除aps、ncb、clw这三个文件,然后打开工程,ctrl+w,按提示来。
3. CWnd::PreCreateWindow:在窗口没有附着在CWnd之前被框架调用。通过修改CREATESTRUCT这个结构体(CREATESTRUCT定义传递给窗口过程的初始化参数),来修改窗口类和样式。
4. 在窗口创建之后改变外观需要在OnCreate中操作。用SetClassLong这个函数。
5. 虽然不能修改MFC底层代码,但是我们可以创建自己的窗口类,使程序用我们的类去创建窗口。WNDCLASS。设计完窗口类之后应该用RegisterClass注册之
6. 使用AfxGetInstanceHandle()获取当前应用程序的句柄。
7. 修改背景和光标应该在view类中修改
8. SetWindowLong() 在窗口创建之后修改窗口的属性,在OnCreate函数中调用。
9. null-terminated string 以空终止“/0”结尾的字符串
10. AfxRegisterWndClass() 如果想注册自己的窗口类,调用这个函数,返回一个null-terminated string which contains class name
11. SetClassLong这个函数的能替换窗口类的信息,下面是替换图标的例子,在CMainFrame类中的OnCreate中最后输入
SetClassLong(m_hWnd,GCL_HICON,(LONG)LoadIcon(NULL,IDI_WARNING));则图标被替换成最后一个参数表示的图标
12. 在CMainFrame中修改光标和背景是没有意义的,因为Frame会被View遮盖,所以,要修改光标和背景需要在View类中修改。但是View类没有提供OnCreate这个消息响应函数,需要自己添加。 SetClassLong(m_hWnd,GCL_HCURSOR,(LONG)LoadCursor(NULL,IDC_CROSS));//修改光标
SetClassLong(m_hWnd,GCL_HBRBACKGROUND,(LONG)(HBRUSH)GetStockObject(BLACK_BRUSH));//修改背景
13. MAKEINTRESOURCE这个宏将一个整型值转化为一个资源
MAKEINTRESOURCE(IDI_ICON1);//这是把资源ID为IDI_ICON1的图标转化为资源的写法
14. 获得应用程序的实例有三种方法
a) AfxGetInstanceHandle()
b) AfxGetApp()->m_hInstance
c) 在MFC架构中,有一个类APP类已经实例化了一个变量:C***App theApp;所以我们在需要的地方生命一下就行了。例如在CMainFrame要使用这个函数,只需要
extern CModifyApp theApp就行了。然后调用theApp->m_hInstance;
15. 要获得一个介于0-2之间的数,可以这样
OnTimer()
{
static int i=0
i=++i%3;
}
16. 设置复选标记,可以用UpDateCommandUI 消息相应,然后用pCmdUI->SetCheck()
17. CTime获取系统时间CTime::GetCurrentTime
18. 设置状态栏信息CStatusBar::SetPaneText
19. 进度栏CProgressCtrl
20. 自定义消息使用
a) 消息在windows中用整数值表示,windows系统消息定义到了WM_USER,自己要定义消息的话,需要在这个基础上面加一个值。#define UM_PROGRESS WM_USER+1
b) 在头文件中自定义消息:#define UM_PROGESS WM_USER+1,有了消息之后我们需要作消息响应函数的声明,在头文件中进行afx_msg void OnProgress()
c) 消息响应函数声明之后需要做消息映射。ON_MESSAGE(UM_PROGRESS,OnProgress)
d) 消息映射之后要实现函数void CMainFrame::OnProgress(){}
21. SendMessage和PostMessage的区别
a) SendMessage和将代码直接放置到SendMessage位置的效果一样
b) PostMessage是将消息放置到消息队列之中,立即返回,这时候消息等待处理
22. 移动窗口:MoveWindow
23. SetWindowText 设置窗口文本。这个可以是一个状态栏
24. SetMessageText这个函数的作用主要是用来设置状态栏的信息。这个一般是最左的,最长的面板。ID为0的。
25. GetDescendantWindow获取一个子孙窗口
26. AFX_IDW_STATUS_BAR 系统默认的状态栏的ID
27. 系统给我们定义好了很多标准的控制条的ID号。只要知道了一个ID,然后用go to definition就可以找到其它的了。
28. 增加启动画面
a) 在project->add to project->component and control->Visual C++ Components,选择Splashscreen
b) 在OnCreate中修改SetTimer中的时间。
29. 修改工具栏——给工具栏增加一个按钮
a) 工具栏的按钮和菜单中的选项的功能是一一对应的,所以,他们有着一样的ID
b) 基于他们拥有同一个ID,那么我们只需要对菜单栏上的MenuItem进行消息处理,即可使工具栏上面的按钮拥有同样的功能
c) 首先在工具栏上新建一个图标(一个位图),然后再在菜单栏新建一个MenuItem,给MenuItem添加消息相应,最后将工具栏中新建的图标的ID设置成和MenuItem一样即可
d) 修改图标的ID需要在所要修改的图标上面双击,这样就打开了它的属性对话框。
e) 想在工具栏上建立一个分隔符,只需要拖动所要插入分割符后面的图标向后移动即可
f) 想要删除一个工具栏上面的图标,只需要将图标拖出工具栏即可。
30. 增加一个工具栏
a) 新建一个工具栏资源,然后在上面随便建几个按钮
b) 到CMainFrame这个类中添加成员变量 CToolBar m_newToolBar;
c) 找到CMainFrame这个类的OnCreate函数,然后找到添加默认的工具栏的代码,如下
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar/n");
return -1; // fail to create
}

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);//使工具栏具有停靠的属性
EnableDocking(CBRS_ALIGN_ANY);//允许当前窗口被工具栏停靠
DockControlBar(&m_wndToolBar);//停靠工具栏
然后将复制,将其中的m_wndToolBar改称我们新定义的m_newToolBar即可
31. 在菜单的MenuItem里面增加一个控制新建的工具栏,并可以显示选中的MenuItem
a) 在菜单栏“查看”下面新建一个项“新工具栏”
b) 用class wizard添加消息响应command
c) 编辑代码
if(!m_newToolBar.IsWindowVisible())
{
m_newToolBar.ShowWindow(SW_SHOWNORMAL);
}
else
{
m_newToolBar.ShowWindow(SW_HIDE);
}
this->RecalcLayout();//若是不加这一行,结果回是工具栏上面的图标不见了,但是工具栏还在
//这个函数的功能就是重新计算窗口的布局
d) 再添加一个消息相应UPDATE_COMMAND_UI,编辑代码
pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());
e) 还可以使ShowControlBar(&m_newToolBar,!m_newToolBar.IsWindowVisible(),FALSE);
这个方法不需要重新计算位置,和重新停靠
32. 修改窗口的大小、程序的标题
通过修改CMainFrame类中的CREATESTRUCT结构体来实现
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWnd::PreCreateWindow(cs) )
return FALSE;
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
cs.cx=300;//新的x,宽度
cs.cy=400;//新的y,高度
//cs.style&=~FWS_ADDTOTITLE;
cs.style=WS_OVERLAPPEDWINDOW;
return TRUE;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: