MFC动态分割窗口,pContext指针始终为空

我需要动态的分割某一个视图,假如我在继承自CWnd或者CView的类MyClass的create中

 m_Split.createStatic();
CCreateContext* pContext = (CCreateContext*)lpCreateStruct->lpCreateParams;
m_Split.createView(......,pContext);

编译,链接都没问题,但分割的窗口就是现实不出来。我看了一下变量,pContext指针始终为空。会不会是这个问题。为什么别人的这么写可以,我的却有问题呢?和有没有文档视图结构有关么?我通常写SDI的程序不带文档。

3个回答

qq758610209
qq758610209 这不是我说的那个问题
接近 5 年之前 回复

我也一样啊,我都是静态分割,跳到那里就终止了,泥搞定了吗

我懂了,你的是sdi还是mdi,mdi要在childfrm中操作

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MFC创建分割窗口出现问题
if (!m_WndSplitter.CreateView(0, 0, pContext->m_pNewViewClass, CSize(250, 0), pContext)) { TRACE0("Failed to create first pane\n"); return FALSE; } // add the second splitter pane - an input view in column 1 if (!m_WndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyView), CSize(0, 0), pContext)) { TRACE0("Failed to create second pane\n"); return FALSE; } SetActiveView((CView*)m_WndSplitter.GetPane(0, 1)); 创建完后拖动窗改变大小右侧有竖线怎么回事![图片说明](https://img-ask.csdn.net/upload/201603/31/1459401757_980091.png)
MFC窗口分割问题,望大神予以小弟指导,感激涕零
参照MFC分割窗的事例进行了窗口分割的工作,但是遇到了只能对第二个窗口进行分割的问题,分割结果如图1,![图片说明](https://img-ask.csdn.net/upload/201502/01/1422805903_529205.png),但现在想实现第一行为一整行,第二行分为两列。本人初步接触MFC,希望知情人予以解答,在此感激不尽。 分割代码如下: if (m_splitter.CreateStatic(this, 2, 1) == NULL) return FALSE; m_splitter.CreateView(0, 0, RUNTIME_CLASS(CSplitterWndView), CSize(960, 200), pContext); //m_splitter.CreateView(1, 0, RUNTIME_CLASS(FormView1), CSize(0, 0), pContext); if (m_splitter1.CreateStatic(&m_splitter, 1, 2, WS_CHILD | WS_VISIBLE, m_splitter.IdFromRowCol(1, 0)) == NULL) return FALSE; ///将第0行0列再分开1行2列 //将FormView1类连接到第二个分栏对象的0行0列 m_splitter1.CreateView(0, 0, RUNTIME_CLASS(FormView1), CSize(960, 0), pContext); m_splitter1.CreateView(0, 1, RUNTIME_CLASS(FormView2), CSize(0, 0), pContext); return TRUE;
MFC单文档视图 窗口分割 如何切换视图
![图片说明](https://img-ask.csdn.net/upload/201601/22/1453451937_376296.png) BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class if(!m_wndSplitter.CreateStatic(this,1,2)) return FALSE; if(!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftPaneView),CSize(100,100),pContext)) return FALSE; if(!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CEditPaneView),CSize(100,100),pContext)) return FALSE; m_pEditView = (CEditPaneView*)m_wndSplitter.GetPane(0,1); return TRUE; } switch(nViewType) { case EDITVIEW: //CEditPaneView { if(!pView->IsKindOf(RUNTIME_CLASS(CEditPaneView))) { //删除旧的视图 m_wndSplitter.DeleteView(0,1); /*CWnd *pWnd=m_wndSplitter.GetPane(0,1); (m_wndSplitter.GetPane(0,1))->ShowWindow(SW_HIDE);*/ //创建新的视图 m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CEditPaneView), CSize(rcRight.Width(),rcRight.Height()),NULL); //调整分布 m_wndSplitter.RecalcLayout(); m_pEditView= (CEditPaneView*)m_wndSplitter.GetPane(0,1); } break; } case LISTVIEW: //CListPaneView { if(!pView->IsKindOf(RUNTIME_CLASS(CListPaneView))) { m_wndSplitter.DeleteView(0,1); m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CListPaneView), CSize(rcRight.Width(),rcRight.Height()),NULL); m_wndSplitter.RecalcLayout(); m_pListView= (CListPaneView*)m_wndSplitter.GetPane(0,1); } break; } default: break; } 上面是部分代码,主要是想实现1-窗口分割,2-分割后的子窗口进行不同视图的显示; 查了资料,网上都是给出的删除再重新建立视图的做法,如上面示例,请问大家有没有遇到类似的问题,都是如何解决的呢,谢谢!
静态分割pContext未知怎么办,谢谢了
![图片说明](https://img-ask.csdn.net/upload/201504/15/1429102174_145527.jpg)
请问mfc单文档分割窗口后,原来可以显示图形的VIEW函数怎么修改才能让其显示原来发的图形。
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if(m_splitter.CreateStatic(this,1,2)==NULL) return FALSE; CRect rect; GetClientRect(&rect); m_splitter.CreateView(0,0,RUNTIME_CLASS(CMannequinView),CSize(rect.Width()/5*4,rect.Height()),pContext); m_splitter.CreateView(0,1,RUNTIME_CLASS(CFormview),CSize(rect.Width()/5,rect.Height()),pContext); return TRUE; }
MFC 单文档 切割窗口 求解
先将窗口分成1行2列,再将左边的一列,分成两行,运行时,左边两行显示不出来,需要拖动分割条。找不到原因。。。。。。 if(m_splitter.CreateStatic(this,1,2)==NULL) return FALSE; if(m_splitter1.CreateStatic(&m_splitter,2,1,WS_CHILD|WS_VISIBLE, m_splitter.IdFromRowCol(0, 0))==NULL) return FALSE; m_splitter1.CreateView(0,0,RUNTIME_CLASS(Topl),CSize(200,200),pContext); m_splitter1.CreateView(1,0,RUNTIME_CLASS(Top2),CSize(200,200),pContext); m_splitter.CreateView(0,1,RUNTIME_CLASS(Top3),CSize(200,400),pContext);
关于MFC静态切分窗口的问题
问题描述: 我新建了一个单文档工程,然后对窗口进行了静态切分,分成了两部分。我在左边的部分创建了两个按钮,想实现点击按钮在右边显示对应的视图。 我的代码如下: 一共有三个视图: View1, view2, view3; 首先我继承了OnCreateClient函数 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { CRect cr; GetWindowRect(&cr); if(m_wndSplitter.CreateStatic(this, 1, 2) == NULL) { return FALSE; } m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CMyView1), CSize(cr.Width()/4, cr.Height()), pContext); m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyView2), CSize(3*cr.Width()/4, cr.Height()), pContext); return TRUE; } 然后我在左边的视图上创建了两个Button: 希望能够控制右面的视图。 然后我自定义了消息。 BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_COMMAND(ID_FIRST_VIEW, OnSwitchToFirst) // ID_FIRST_VIEW 是自己定义的 On_COMMAND(ID_SECOND_VIEW, OnSwitchToSecond) END_MESSAGE_MAP() Button 在 CView1 类中添加了通知处理 void CMyTreeBar::OnButton1() { AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND, ID_FIRST_VIEW); } void CMyTreeBar::OnButton2() { AfxGetApp()->m_pMainWnd->SendMessage(WM_COMMAND, ID_SECOND_VIEW); } 然后在CMainFrame中添加了响应函数 void CMainFrame::OnSwitchToFirst() { m_wndSplitter.DeleteView(0, 1); m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyView2), CSize(0, 0), NULL); m_wndSplitter.RecalcLayout(); } void CMainFrame::OnSwitchToSecond() { m_wndSplitter.DeleteView(0, 1); m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMyView2), CSize(0, 0), NULL); m_wndSplitter.RecalcLayout(); } 但是运行结果 点击Button2, View2 消失了,但是没有吧 View3 显示出来。 点击Button1, View2 又显示出来了。 // 程序运行都是正确的 总之就是没有实现了切换。我是新手,很着急,请各位好心大哥给点建议和帮助。 急急急!!!!
MFC 单文档视图分割的视图大小问题
``` BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if (!m_wndSplitter.CreateStatic(this, 1, 2)) { return FALSE; } CRect rect; GetClientRect(&rect); m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(TreeView), CSize(rect.Width() / 3 - 170, rect.Height()), pContext); if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, 1, 2, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)) || !m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(RichEditView), CSize(rect.Width() / 3, rect.Height()), pContext)) { return FALSE; } if (!m_wndSplitter3.CreateStatic(&m_wndSplitter2, 2, 1, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 0)) || !m_wndSplitter3.CreateView(0, 0, RUNTIME_CLASS(EditView), CSize(rect.Width() / 3, rect.Height() / 10), pContext) || !m_wndSplitter3.CreateView(1, 0, RUNTIME_CLASS(ListView), CSize(rect.Width() / 3, rect.Height() * 0.9), pContext)) { return FALSE; } return TRUE; //return CFrameWnd::OnCreateClient(lpcs, pContext); } ``` 想把视图分割成3列,并且第二列是两行的。 但是运行出来中间一列的宽度不对,非常窄,高度倒是对的。。不知道怎么回事。。
mfc的CFormView大小不随父View变化
是这样的,我在mainFrm.cpp里用了个切分条分割窗口,右边是一个继承自CFormView的自定义View,叫MyFormView。如下: ``` m_splitter.CreateView(0,1,RUNTIME_CLASS(MyFormView),CSize(rect.Width()/5,rect.Height()), pContext); ``` 可是显示结果,右边这个view里的MyFormView对象大小超出所在view的大小,自动生成了一个滚动条,我想让这个MyFormView的大小随所在view的大小改变而改变。用过movewindow这个函数不管用。结果如下: ![图片说明](https://img-ask.csdn.net/upload/201501/21/1421825657_975046.png) 我想让右边不出现那个滚动条,让这个对话框大小随view改变。急,请看到的一定告诉我。
CDialogEx类的pointer this怎么可以调用CFrameWnd类的CreateView函数(但我的电脑里确实可以!!!)
当我查看原来写的MFC代码时,发现了一个不可思议的问题,代码如下 ``` CMyView * CDialogViewDlg::openNewView(CMyDocument * newDoc) { CCreateContext pContext; pContext.m_pCurrentDoc = newDoc; pContext.m_pNewViewClass = RUNTIME_CLASS(CMyView); 。。。 CMyView * newView = (CMyView *)((CFrameWnd*)this)->CreateView(&pContext); ASSERT(newView); 。。。 return newView; } ``` 注意代码里的(CFrameWnd\*)this)->CreateView(&pContext); 我先把CDialogEx继承下来的对象指针this强制性转换成CFrameWnd\*,再调用CFrameWnd类的CreateView创建View窗口,结果成功!! 我万万不解的是CDialogEx类从CWnd类继承而来,而CFrameWnd类也是从CWnd继承而来,表明CDialogEx和CFrameWnd的对象是“兄弟”关系,但怎么强制转换后就可以调用平辈的CreateView,而且还成功了?!求哪位大神帮我解释一下,谢谢!!
求助!MFC单文档多视图的各视图的问题
如果我只用系统最初建好的文档类来储存数据,而各视图显示的是数据的不同部分, 1、首先这样是否能实现?还是说必须每个视图要建一个文档? 2、如果可以。那么我怎么获得其中某个视图的指针?(比如我这里用到的有CTreeView,CRichEditView,并且CRichView的视图块有两个,需要让他们独立显示,而不是共同显示一个数据) 目前只是把视图单纯地分割了,代码如下 ``` BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if (!m_wndSplitter.CreateStatic(this, 1, 2)) { return FALSE; } CRect rect; GetClientRect(&rect); m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(TreeView), CSize(rect.Width() / 3 - 170, rect.Height()), pContext); if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, 1, 2, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)) || !m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(RichEditView), CSize(rect.Width() / 3 - 50, rect.Height()), pContext) || !m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(RichEditView), CSize(rect.Width() / 3, rect.Height()), pContext)) { return FALSE; } return TRUE; //return CFrameWnd::OnCreateClient(lpcs, pContext); } ```
MFC框架下 单文档视图中多视图切换问题
在MainFrm.cpp 里对主视图进行了切分 ``` BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // CRect rc; // 获取框架窗口客户区的CRect对象 GetClientRect(&rc); // 创建静态分割窗口,三行一列 if (!m_wndSplitter.CreateStatic(this, 3, 1)) return FALSE; // 创建上面窗格中的视图 if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTopview), CSize(rc.bottom, rc.right / 9), pContext)) return FALSE; // 创建中间窗格中的视图 if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CCentview), CSize(rc.Width(), rc.right / 7 * 5.9), pContext)) return FALSE; // 创建下面窗格中的视图 if (!m_wndSplitter.CreateView(2, 0, RUNTIME_CLASS(Cfootview), CSize(rc.bottom, rc.right / 7), pContext)) return FALSE; centview = (CCentview*)m_wndSplitter.GetPane(1, 0); m_wndSplitter.HideSplitter(); m_isSplitter = TRUE; return TRUE; } ``` 主要是切割成三行视图,中间也就是第二行视图是根据第一行视图里按钮的事件进行切换的 比如现在有 treeview, listview这2个视图; 切换时使用这种方式 ``` void CMainFrame::SwitchToView(int nViewType) { CView* pView = (CView*)m_wndSplitter.GetPane(1,0); CRect rcRight, rcFrame; pView->GetClientRect(&rcRight); GetClientRect(&rcFrame); switch (nViewType) { case CENTVIEW: //treeview { if (!pView->IsKindOf(RUNTIME_CLASS(Ctreeview))) { //删除旧的视图 m_wndSplitter.DeleteView(1,0); //创建新的视图 m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Ctreeview), CSize(rcRight.Width(), rcRight.Height()), NULL); //调整分布 m_wndSplitter.RecalcLayout(); treeview = (Ctreeview*)m_wndSplitter.GetPane(1,0); } break; } case CLOG: //CLOG { if (!pView->IsKindOf(RUNTIME_CLASS(Clistview))) { //删除旧的视图 m_wndSplitter.DeleteView(1,0); //创建新的视图 m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Clistview), CSize(rcRight.Width(),rcRight.Height()),NULL); //调整分布 m_wndSplitter.RecalcLayout(); listview = (Clistview*)m_wndSplitter.GetPane(1,0); } break; } default: break; } } ``` 视图切换没有问题,现在主界面使用treeview视图 里面是有数据的,当我切换到listview视图如果给这个视图添加数据比如加个函数在OnInitialUpdate里调用 就会报错 ![图片说明](https://img-ask.csdn.net/upload/201603/11/1457686693_219535.png) 请大神看看是什么原因 应该怎么修改 编译器是 VS2013
提问:MFC中CSplitterWnd
## CSplitterWnd->CreateView() 请问,是分割了视图还是客户区? ## 我看了最后参数pContext,是个结构体,应该是分割里面的某个参数? ## 懂的朋友解答一下。
SDI单文档视图分割问题
按照网上的例程,进行单文档视图分割,新建了一个类CLeftView类,继承自CTreeView,当在CMainFrame的OnCreatClient中添加如下代码(m_wndSplitter 是CMainFrame中的CSplitterWnd 类型的变量): if (!m_wndSplitter.CreateStatic(this, 1, 2)) return FALSE; if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CEx010205View), CSize(500, 100), pContext) || !m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(COutPutView), CSize(100, 100), pContext)) { m_wndSplitter.DestroyWindow(); return FALSE; } return TRUE; 在MainFrame.cpp中添加#include "LeftView.h"后,编译报出如下错误: error C2039: “classCLeftView”: 不是“CLeftView”的成员 : 参见“CLeftView”的声明 : error C2065: “classCLeftView”: 未声明的标识符 请求高手指教
急!MFC单文档多视图的CTreeView不能正常使用
class TreeView : public CTreeView 是我自建的树形结构C++类 void TreeView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); TVINSERTSTRUCT ti = { 0 }; HTREEITEM hParent, Parent; //TreeView* m_pMyView = (TreeView*)m_wndSplitter.GetPane(0, 0); HIMAGELIST himl; //加入图标 himl = ImageList_Create(16, 16, ILC_COLOR24, 1, 12); ImageList_Add(himl, LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP1)), NULL); SendMessage(TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)himl); ti.item.mask = TVIF_TEXT | TCIF_IMAGE | TVIF_SELECTEDIMAGE; ti.item.iImage = 0; ti.item.iSelectedImage = 0; ti.item.pszText = _T("127.0.0.1: C0400"); ti.hParent = NULL; ti.hInsertAfter = TVI_ROOT; Parent = hParent = (HTREEITEM)SendMessage(TVM_INSERTITEM, 0, (LPARAM)&ti); ti.hParent = hParent; ti.hInsertAfter = TVI_LAST;//TVI_LAST表示节点添加在最后 ti.item.iImage = 0; ti.item.iSelectedImage = 0; ti.item.pszText = _T("Slot0"); hParent = (HTREEITEM)SendMessage(TVM_INSERTITEM, 0, (LPARAM)&ti); // TODO: 在此添加专用代码和/或调用基类 } BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: 在此添加专用代码和/或调用基类 if (!m_wndSplitter.CreateStatic(this, 1, 2)) { return FALSE; } CRect rect; GetClientRect(&rect); m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(TreeView), CSize(rect.Width() / 3 - 170, rect.Height()), pContext); if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, 1, 2, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)) || !m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(RichEditView), CSize(rect.Width() / 3 - 50, rect.Height()), pContext) || !m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(RichEditView), CSize(rect.Width() / 3, rect.Height()), pContext)) { return FALSE; } return TRUE; //return CFrameWnd::OnCreateClient(lpcs, pContext); } 用的是单文档,代码如上。但是创建的树形结构不能正常打开,鼠标双击也不打开,而且选中时的高亮只出现一下就恢复了。一直不知道咋解决,求帮助啊 而且相同代码在新建的单文档能正常实现 但是我这个只是把非客户区重绘了,边框去掉了,其他也没变什么,然后就不能正常使用了。。万分不解。。
MFC 做的CTreeView根项不能打开的问题
相关代码如下: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { if (!m_wndSplitter.CreateStatic(this, 1, 2)) { return FALSE; } CRect rect; GetClientRect(&rect); m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(TreeView), CSize(rect.Width() / 3 - 170, rect.Height()), pContext); if (!m_wndSplitter2.CreateStatic(&m_wndSplitter, 1, 2, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1)) || !m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(EditView), CSize(rect.Width() / 3 - 50, rect.Height()), pContext) || !m_wndSplitter2.CreateView(0, 1, RUNTIME_CLASS(EditView), CSize(rect.Width() / 3, rect.Height()), pContext)) { return FALSE; } return TRUE; //return CFrameWnd::OnCreateClient(lpcs, pContext); } void TreeView::OnInitialUpdate() { CTreeView::OnInitialUpdate(); ptheTree = &GetTreeCtrl(); ptheTree->ModifyStyle(0, TVS_HASLINES | TVS_EDITLABELS | TVS_HASBUTTONS | TVS_EDITLABELS | TVS_LINESATROOT); TVINSERTSTRUCT tvInsert; HTREEITEM hTreeItem; tvInsert.hInsertAfter = TVI_LAST;//TVI_LAST; tvInsert.hParent = TVI_ROOT; tvInsert.item.mask = TVIF_TEXT; tvInsert.item.pszText = "搜索引擎"; hTreeItem = ptheTree->InsertItem(&tvInsert); tvInsert.hParent = hTreeItem; tvInsert.item.pszText = "Google"; ptheTree->InsertItem(&tvInsert); tvInsert.item.pszText = "Baidu"; ptheTree->InsertItem(&tvInsert); ptheTree->Expand(hTreeItem, TVE_EXPAND); //默认为合上的TVE_COLLAPSE,打开的TVE_EXPAND } 做出来后效果这样![图片说明](https://img-ask.csdn.net/upload/201602/14/1455420800_132778.png) 但是当我点根项时并没有展开(况且我类型设置了TVE_EXPAND,应该直接是打开的啊。。),而且单击根项应该选中高亮的也没有(实际效果是高亮一下后立刻恢复了,就跟刷新了似得)。 大家帮我看看问题可能出在哪。。
以下两个MFC函数里的区别是什么
第一个函数是在vc6.0中用class Wizard添加的 第二个函数是在vc的类视图里用 Add Window Message Handle添加的,第二个函数里修改了标题,程序没有进入第一个函数,它们的作用分别是什么,哪个才是窗口的消息回调函数?? ``` BOOL CTestDlg::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class SetWindowText("在OnCreate中修改窗口标题"); return CDialog::Create(IDD, pParentWnd); } int CTestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CDialog::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here // SetWindowText("在OnCreate中修改窗口标题"); return 0; } ```
MFC 单文档视图切分视图调用问题
在MainFrm.cpp 里对主视图进行了切分 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Add your specialized code here and/or call the base class // CRect rc; // 获取框架窗口客户区的CRect对象 GetClientRect(&rc); // 创建静态分割窗口,三行一列 if (!m_wndSplitter.CreateStatic(this, 3, 1)) return FALSE; // 创建上面窗格中的视图 if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTopview), CSize(rc.bottom, rc.right / 9), pContext)) return FALSE; // 创建中间窗格中的视图 if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CCentview), CSize(rc.Width(), rc.right / 7 * 5.9), pContext)) return FALSE; // 创建下面窗格中的视图 if (!m_wndSplitter.CreateView(2, 0, RUNTIME_CLASS(Cfootview), CSize(rc.bottom, rc.right / 7), pContext)) return FALSE; centview = (CCentview*)m_wndSplitter.GetPane(1, 0); m_wndSplitter.HideSplitter(); m_isSplitter = TRUE; return TRUE; } 主要是切割成三行视图,中间也就是第二行视图是根据第一行视图里按钮的事件进行切换的 比如现在有 treeview, listview这2个视图; 切换时使用这种方式 void CMainFrame::SwitchToView(int nViewType) { CView* pView = (CView*)m_wndSplitter.GetPane(1,0); CRect rcRight, rcFrame; pView->GetClientRect(&rcRight); GetClientRect(&rcFrame); switch (nViewType) { case CENTVIEW: //treeview { if (!pView->IsKindOf(RUNTIME_CLASS(Ctreeview))) { //删除旧的视图 m_wndSplitter.DeleteView(1,0); //创建新的视图 m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Ctreeview), CSize(rcRight.Width(), rcRight.Height()), NULL); //调整分布 m_wndSplitter.RecalcLayout(); treeview = (Ctreeview*)m_wndSplitter.GetPane(1,0); } break; } case CLOG: //CLOG { if (!pView->IsKindOf(RUNTIME_CLASS(Clistview))) { //删除旧的视图 m_wndSplitter.DeleteView(1,0); //创建新的视图 m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Clistview), CSize(rcRight.Width(),rcRight.Height()),NULL); //调整分布 m_wndSplitter.RecalcLayout(); listview = (Clistview*)m_wndSplitter.GetPane(1,0); } break; } default: break; } } 视图切换没有问题,现在主界面使用treeview视图 里面是有数据的,当我切换到listview视图如果给这个视图添加数据比如加个函数在OnInitialUpdate里调用 就会报错 图片说明 请大神看看是什么原因 应该怎么修改 编译器是 VS2013
关于动态创建的问题,内容如下。
IMPLEMENT_DYNCREATE(CMyView,CView) BEGIN_MESSAGE_MAP(CMyView,CView) END_MESSAGE_MAP() void CMyView::OnDraw(CDC * pDC){ pDC->TextOut(100,100,"CMyView::OnDraw"); } class CMainFrame:public CFrameWnd{ DECLARE_MESSAGE_MAP() public: virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext ); public: CSplitterWnd m_splitter1; CSplitterWnd m_splitter2; }; BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) END_MESSAGE_MAP() BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext){ m_splitter1.CreateStatic(this,2,1); m_splitter2.CreateStatic(&m_splitter1,1,2,WS_CHILD|WS_VISIBLE,m_splitter1.IdFromRowCol(0,0));//先创建两个框架窗口 //其中一个为日字形,还有一个在日字形的上半部分,创建成为倒日字形。 m_splitter2.CreateView(0,0,RUNTIME_CLASS(CMyView),CSize(100,100),pContext); m_splitter2.CreateView(0,1,RUNTIME_CLASS(CEditView),CSize(100,100),pContext); m_splitter1.CreateView(1,0,RUNTIME_CLASS(CHtmlView),CSize(200,200),pContext);//然后镶嵌三块玻璃。问题,为何 //三个函数均能够使用动态创建信息。 CHtmlView * pHtml=(CHtmlView*)m_splitter1.GetPane(1,0);//获取某一个视图对象的地址 pHtml->Navigate("c:/"); m_splitter1.SetRowInfo(0,200,100);//设置日字形窗口第0行,高度是200,最低100 // m_splitter1.SetColumnInfo(0,200,100);//列宽 return CFrameWnd::OnCreateClient(lpcs,pContext);//返回基类默认处理 } class CMyWinApp: public CWinApp{ public: virtual BOOL InitInstance(); }; CMyWinApp theApp; BOOL CMyWinApp::InitInstance(){ CMainFrame* pFrame=new CMainFrame(); pFrame->Create(NULL,"mfcsplitter"); m_pMainWnd->ShowWindow(SW_SHOW); m_pMainWnd->UpdateWindow(); return TRUE; } 仅仅在CView中写了两个宏定义,为何子类都能用? 是否父类定义了宏定义,子类都可以用? 那么子类定义了宏定义,父类可不可以用动态创建? CEditView,CHtmlView就这两个
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载    点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量 path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
Spring Boot2 系列教程(十七)SpringBoot 整合 Swagger2
前后端分离后,维护接口文档基本上是必不可少的工作。 一个理想的状态是设计好后,接口文档发给前端和后端,大伙按照既定的规则各自开发,开发好了对接上了就可以上线了。当然这是一种非常理想的状态,实际开发中却很少遇到这样的情况,接口总是在不断的变化之中,有变化就要去维护,做过的小伙伴都知道这件事有多么头大!还好,有一些工具可以减轻我们的工作量,Swagger2 就是其中之一,至于其他类似功能但是却收费的软...
Python 基础(一):入门必备知识
目录1 标识符2 关键字3 引号4 编码5 输入输出6 缩进7 多行8 注释9 数据类型10 运算符10.1 常用运算符10.2 运算符优先级 1 标识符 标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。 以下划线开头的标识符有特殊含义,单下划线开头的标识符,如:_xxx ,表示不能直接访问的类属性,需通过类提供
天天学JAVA-JAVA基础(6)
如果觉得我写的还行,请关注我的博客并且点个赞哟。本文主要介绍JAVA 中最常使用字符串常量String相关知识。 1.String简介 2.创建字符串对象两种方式的区别 3.String常用的方法 4.String的不可变性 5.一道阿里面试题,你会做吗? 1.String简介 1.1String源码 首先看一段String源码,String主要实现了Serializable、Compar...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。 1. for - else 什么?不是 if 和 else 才
数据库优化 - SQL优化
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 c/c++ 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹
2020 网络课 智慧树自动刷课代码,自动跳转,自动答题并关闭弹窗,自动1.5倍速静音
刷课一时爽,一直刷课一直爽! 终于让我找到了这个黑客代码了,教程开始: 只限谷歌浏览器和火狐浏览器使用,如果第一次失败,请重新试一下次 将下面代码复制后,进入浏览器按F12键,先点击console 然后Ctrl+v复制代码 最后按回车键即可 var ti = $("body"); var video = $(".catalogue_ul1 li[id*=video-]"); var i = 1;...
面试官:你连RESTful都不知道我怎么敢要你?
面试官:了解RESTful吗? 我:听说过。 面试官:那什么是RESTful? 我:就是用起来很规范,挺好的 面试官:是RESTful挺好的,还是自我感觉挺好的 我:都挺好的。 面试官:… 把门关上。 我:… 要干嘛?先关上再说。 面试官:我说出去把门关上。 我:what ?,夺门而去 文章目录01 前言02 RESTful的来源03 RESTful6大原则1. C-S架构2. 无状态3.统一的接
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看
SQL-小白最佳入门sql查询一
一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统; 二 准备前提 需要建立一张学生表,列分别是id,名称,年龄,学生信息;本示例中文章篇幅原因SQL注释略; 建表语句: CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // dosho
致 Python 初学者
文章目录1. 前言2. 明确学习目标,不急于求成,不好高骛远3. 在开始学习 Python 之前,你需要做一些准备2.1 Python 的各种发行版2.2 安装 Python2.3 选择一款趁手的开发工具3. 习惯使用IDLE,这是学习python最好的方式4. 严格遵从编码规范5. 代码的运行、调试5. 模块管理5.1 同时安装了py2/py35.2 使用Anaconda,或者通过IDE来安装模
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
羞,Java 字符串拼接竟然有这么多姿势
二哥,我今年大二,看你分享的《阿里巴巴 Java 开发手册》上有一段内容说:“循环体内,拼接字符串最好使用 StringBuilder 的 append 方法,而不是 + 号操作符。”到底为什么啊,我平常一直就用的‘+’号操作符啊!二哥有空的时候能否写一篇文章分析一下呢? 就在昨天,一位叫小菜的读者微信我说了上面这段话。 我当时看到这条微信的第一感觉是:小菜你也太菜了吧,这都不知道为啥啊!我估...
写1行代码影响1000000000人,这是个什么项目?
不带钱不带卡,只带手机出门就能畅行无阻,这已是生活的常态。益普索发布的《2019第一季度第三方移动支付用户研究》报告显示,移动支付在手机网民中的渗透率高达95.1%,截至今年1月,支付宝全球用户数已经突破10亿。你或许每天都会打开支付宝,付款购物、领取权益、享受服务……但你或许不知道的是,在这个方便、快捷、智能化的APP背后,有一群年轻的技术人,用智慧和创新让它每天都变得更“聪明”一点。 ...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI 算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC
一点一滴记录 Java 8 stream 的使用
日常用到,一点一滴记录,不断丰富,知识积累,塑造自身价值。欢迎收藏 String 转 List String str = 1,2,3,4; List<Long> lists = Arrays.stream(str.split(",")).map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); Lis...
8年经验面试官详解 Java 面试秘诀
    作者 | 胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。   Java程序员准备和投递简历的实
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车? 某胡同口的煎饼摊一年能卖出多少个煎饼? 深圳有多少个产品经理? 一辆公交车里能装下多少个乒乓球? 一
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问