CMainFrame::PreCreateWindow函数中WS_CLIPCHILDREN属性的修改需要慎重!

本文探讨了在使用MFC框架进行Windows应用程序开发时,针对CMainFrame类的PreCreateWindow函数中窗口样式的修改可能引起的视图对话框显示异常的问题。通过对特定代码段的分析,指出了一些不当的窗口样式设置可能导致的副作用。
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
    
if!CFrameWnd::PreCreateWindow(cs) )
        
return FALSE;
    
// TODO: Modify the Window class or styles here by modifying
    cs.cx = 350;
    cs.cy 
= 600;
    cs.dwExStyle 
&= ~WS_EX_CLIENTEDGE;
    
//cs.dwExStyle |=WS_CLIPCHILDREN;//should NOT use this
    cs.lpszClass = AfxRegisterWndClass(0);
    
return TRUE;
}

 上出注释处的代码若采用,将使得Frame里对应的View上的Dialog窗体不能正常显示,Tab倒是可以。

========================
以上内容有待进一步修正!
这段代码是MFC框架中`CMainFrame`类的部分实现,主要涉及构造函数、析构函数以及两个与“票务链接”功能相关的成员函数。以下是对代码的解析: --- ### **1. 构造函数 `CMainFrame::CMainFrame()`** ```cpp CMainFrame::CMainFrame() : m_TicketEnable(FALSE) // 初始化成员变量 { m_pBar = NULL; // 初始化指针 m_bShowGroupTemp = false; // 初始化布尔标志 } ``` - **功能**:初始化主框架窗口类的成员变量。 - `m_TicketEnable(FALSE)`:禁用票务功能(可能控制菜单/工具栏按钮的可用性)。 - `m_pBar = NULL`:初始化一个指针(可能是工具栏或状态栏指针)。 - `m_bShowGroupTemp = false`:布尔标志,可能用于控制临时组的显示状态。 --- ### **2. 析构函数 `CMainFrame::~CMainFrame()`** ```cpp CMainFrame::~CMainFrame() { // 注释掉的代码:可能用于释放全局对话框指针 // if (g_pDlgDevLevelView != NULL) { // delete g_pDlgDevLevelView; // g_pDlgDevLevelView = NULL; // } } ``` - **功能**:清理资源(但当前未实际执行任何操作)。 - 注释部分可能是遗留代码,原本用于释放全局对话框对象 `g_pDlgDevLevelView`。 --- ### **3. 命令处理函数 `OnLinkTicket()`** ```cpp void CMainFrame::OnLinkTicket() { CTyTool::c_drawTy = lnkTicket; // 设置绘图类型为“票务链接” } ``` - **功能**:响应菜单/工具栏按钮的点击事件。 - 将静态成员变量 `CTyTool::c_drawTy` 设为 `lnkTicket`,表示当前绘图模式切换为“票务链接”。 --- ### **4. UI更新函数 `OnUpdateLinkTicket(CCmdUI* pCmdUI)`** ```cpp void CMainFrame::OnUpdateLinkTicket(CCmdUI* pCmdUI) { OnUpdateDrawTyTool(pCmdUI); // 调用基类或通用更新逻辑 if (!m_TicketEnable) pCmdUI->Enable(FALSE); // 禁用按钮 else { pCmdUI->Enable(); // 启用按钮 pCmdUI->SetRadio((CTyTool::c_drawTy == lnkTicket)); // 设置单选状态 } } ``` - **功能**:动态更新票务链接按钮的UI状态。 1. 调用 `OnUpdateDrawTyTool(pCmdUI)`(可能是基类或通用绘图工具的更新逻辑)。 2. 根据 `m_TicketEnable` 决定是否禁用按钮: - 若禁用(`FALSE`),调用 `pCmdUI->Enable(FALSE)`。 - 若启用,则: - 调用 `pCmdUI->Enable()` 启用按钮。 - 调用 `pCmdUI->SetRadio()` 设置按钮的单选状态(是否为当前绘图模式)。 --- ### **关键点总结** 1. **成员变量**: - `m_TicketEnable`:控制票务功能的可用性。 - `m_pBar` 和 `m_bShowGroupTemp`:用途需结合其他代码进一步分析。 2. **票务功能逻辑**: - `OnLinkTicket()` 设置绘图类型。 - `OnUpdateLinkTicket()` 根据状态更新UI(禁用/启用、单选状态)。 3. **代码风格**: - 析构函数中注释掉的代码可能是资源泄漏的隐患,需确认是否需要取消注释。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值