MFC函数—— CWnd::PreCreateWindow

本文深入解析了MFC框架中CWnd::PreCreateWindow成员函数的使用方式,包括其返回值、参数及说明。着重讨论了如何在窗口创建前修改CREATESTRUCT结构,并提供了与基类相关的MFC源代码信息,以便用户了解如何根据自己的应用程序需求调整窗口风格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 CWnd::PreCreateWindow


virtual BOOL PreCreateWindow( CREATESTRUCT& cs );

返回值:

如果要继续窗口的创建过程,则返回非零值;返回0则表明创建过程失败。

参数:

cs一个CREATESTRUCT结构

说明:

框架在与CWnd对象相连接的Windows窗口被创建之前调用这个成员函数。永远不要直接调用这个函数。

这个函数的缺省实现检验窗口类名是否为NULL,如是,则用适当的缺省值来代替。重载这个函数以在窗口被创建之前修改CREATESTRUCT结构。

每个从CWnd派生的类都在它重载的PreCreateWindow中加入了自己的功能。在设计时,没有描述这些派生的PreCreatWindow。

要确定每个类的适当的风格以及风格之间的相互依赖关系,你可以检查与你的应用程序的基类有关的MFC源代码。

如果你选择了重载PreCreateWindow,则你可以使用从MFC源代码中收集的信息来确定你的应用程序的基类中使用的风格是否能够提供你需要的功能。

有关改变窗口风格的更多信息参见联机的《Visual C++程序员指南》中的“改变MFC创建的窗口的风格”。

// MFC3DAppView.cpp: CMFC3DAppView 类的实现 // #include "pch.h" #include "framework.h" // SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的 // ATL 项目中进行定义,并允许与该项目共享文档代码。 #ifndef SHARED_HANDLERS #include "MFC3DApp.h" #endif #include "MFC3DAppDoc.h" #include "MFC3DAppView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CMFC3DAppView IMPLEMENT_DYNCREATE(CMFC3DAppView, CView) BEGIN_MESSAGE_MAP(CMFC3DAppView, CView) // 标准打印命令 ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CMFC3DAppView::OnFilePrintPreview) ON_WM_CONTEXTMENU() ON_WM_RBUTTONUP() END_MESSAGE_MAP() // CMFC3DAppView 构造/析构 CMFC3DAppView::CMFC3DAppView() noexcept { // TODO: 在此处添加构造代码 } CMFC3DAppView::~CMFC3DAppView() { } BOOL CMFC3DAppView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 return CView::PreCreateWindow(cs); } // CMFC3DAppView 绘图 void CMFC3DAppView::OnDraw(CDC* pDC) { CMFC3DAppDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; TwoXiece(m_vertices, pDC); } // CMFC3DAppView 打印 void CMFC3DAppView::OnFilePrintPreview() { #ifndef SHARED_HANDLERS AFXPrintPreview(this); #endif } BOOL CMFC3DAppView::OnPreparePrinting(CPrintInfo* pInfo) { // 默认准备 return DoPreparePrinting(pInfo); } void CMFC3DAppView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: 添加额外的打印前进行的初始化过程 } void CMFC3DAppView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: 添加打印后进行的清理过程 } void CMFC3DAppView::OnRButtonUp(UINT /* nFlags */, CPoint point) { ClientToScreen(&point); OnContextMenu(this, point); } void CMFC3DAppView::OnContextMenu(CWnd* /* pWnd */, CPoint point) { #ifndef SHARED_HANDLERS theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE); #endif } void CMFC3DAppView::TwoXiece(float * p, CDC * pDC) { int i, q[24], j = 0; float x, y, z; for (i = 0; i < 24; i = i + 3) { x = p[i]; y = p[i + 1]; z = p[i + 2]; p[i] = x + z * m_t * cos(m_b); p[i + 1] = y + z * m_t * sin(m_b); p[i + 2] = 0; } for (i = 0; i < 24; i = i + 3) { q[j++] = (int)p[i]; q[j++] = (int)p[i + 1]; } CPen pen(PS_SOLID, 1, RGB(0, 0, 0)); CPen* pOldPen = pDC->SelectObject(&pen); int s1[10] = { q[0], q[1], q[2], q[3], q[10], q[11], q[8], q[9], q[0], q[1] }; int s2[10] = { q[4], q[5], q[6], q[7], q[14], q[15], q[12], q[13], q[4], q[5] }; pDC->Polygon((LPPOINT)s1, 5); pDC->Polygon((LPPOINT)s2, 5); pDC->MoveTo(q[0], q[1]); pDC->LineTo(q[6], q[7]); pDC->MoveTo(q[2], q[3]); pDC->LineTo(q[4], q[5]); pDC->MoveTo(q[8], q[9]); pDC->LineTo(q[14], q[15]); pDC->MoveTo(q[10], q[11]); pDC->LineTo(q[12], q[13]); pDC->SelectObject(pOldPen); } // CMFC3DAppView 诊断 #ifdef _DEBUG void CMFC3DAppView::AssertValid() const { CView::AssertValid(); } void CMFC3DAppView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CMFC3DAppDoc* CMFC3DAppView::GetDocument() const // 非调试版本是内联的 { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMFC3DAppDoc))); return (CMFC3DAppDoc*)m_pDocument; } #endif //_DEBUG // CMFC3DAppView 消息处理程序 这个正方体画出来有点缺陷
最新发布
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值