在VC 中工具栏的隐藏与显示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VC 中工具栏的隐藏与显示相关的知识,希望对你有一定的参考价值。

首先看代码
void CMainFrame::OnViewNewbar()

// TODO: Add your command handler code here
if(m_newToolBar.IsWindowVisible())

m_newToolBar.ShowWindow(SW_HIDE);
else
m_newToolBar.ShowWindow(SW_SHOW);

DockControlBar(&m_newToolBar);
RecalcLayout();

问题一:我在菜单栏上设置了一个菜单,来实现工具栏的显示与隐藏,
DockControlBar(&m_newToolBar);
RecalcLayout();
请问这两句话的作用?
问题二:当工具栏悬浮时,我按下菜单,工具栏隐藏,当我再按下菜单,工具栏却显示再框架窗口的顶部,怎样改变程序使工具栏显示时悬浮在原来位置?

1、现在vc版本已经很多,这里以vc6示例。

2、启动vc6,在菜单栏里的“工具”上单击,在弹出的下拉菜单里单击“定制”。

3、在弹出的窗口里的工具栏下,勾选择,或取消勾选项目,就能达到工具栏的隐藏与显示了。

参考技术A RecalcLayout是CFrameWnd定义的虚拟函数,
边框窗口在必要的时候调用虚拟函数RecalcLayout来重新放置它的控制条和客户窗口,例如在创建窗口时、响应消息WM_SIZE时
CFrameWnd::RecalcLayout调用CWnd的成员函数RepositionBars完成控制条窗口的重新放置

插页式广告立即隐藏并展开转场

【中文标题】插页式广告立即隐藏并展开转场【英文标题】:Interstitial Ads hide immediately with unwind segue 【发布时间】:2019-09-15 16:21:23 【问题描述】:

我正在尝试将插页式广告添加到我的应用中。我有 6 个连续的视图控制器。我在 VC #5 上有 3 个按钮。其中两个是 VC#1 和 VC#3 的展开序列。第三个按钮通向 VC#6。我希望每个按钮触发添加。我没有问题将广告添加到第三个按钮与前进segue。但我正在努力解开 segue 按钮。广告仅显示第二次,然后继续展开。

var interstitial: GADInterstitial!

override func viewDidLoad() 
        super.viewDidLoad()
        interstitial = createAndLoadInterstitial()


    func createAndLoadInterstitial() -> GADInterstitial 
        let interstitial = GADInterstitial(adUnitID: "ca-app-pub-3940256099942544/4411468910")
        interstitial.delegate = self
        interstitial.load(GADRequest())
        return interstitial
    
    func interstitialDidDismissScreen(_ ad: GADInterstitial) 
        interstitial = createAndLoadInterstitial()
    

我尝试对一个按钮使用带有标识符的 unwind segue,而对第二个按钮使用带有按钮的直接 segue。

@IBAction func againButtonPressed(_ sender: UIButton) 

        if interstitial.isReady 
            interstitial.present(fromRootViewController: self)
         else 
            print("Ad wasn't ready")
        
        performSegue(withIdentifier: "backToInstruction", sender: self)

    

 @IBAction func endButtonPressed(_ sender: UIButton) 

if interstitial.isReady 
            interstitial.present(fromRootViewController: self)
         else 
            print("Ad wasn't ready")
        
    

我尝试在 interstitialDidDismissScreen 函数中使用 performSegue。它有点工作,它在 add 被解雇后触发 segue,但在 As 的十字架被按下后需要 10 秒才能进入 VC,这不是最好的体验。 所以,我不知道还能尝试什么......

【问题讨论】:

【参考方案1】:

您不应在显示 Add 后立即触发 performSegue。相反,您需要将其推迟到 Add 被解除。为此,您需要将 Segue 代码移动到 interstitialDidDismissScreen 回调。像这样,

func interstitialDidDismissScreen(_ ad: GADInterstitial) 
    if isAgainButtonPressed 
        performSegue(withIdentifier: "backToInstruction", sender: self)
        return
    
    interstitial = createAndLoadInterstitial()

然后你在 againButtonPresed 方法中将 isAgainButtonPressed 设置为 true。

【讨论】:

这是一个选项,但我只是不明白:如果使用“forward segue”,它会在用户关闭它之前显示广告-> 在广告被关闭后触发 segue,我不需要使用调度队列。但是 unwind segue 会立即触发。必须有一个选项可以让 unwind segue 表现得像 forward 一样。 在 unwind segue 的情况下,被解除的 viewController 被释放。前向转场并非如此。推送其他 viewController 的 viewController 仍然存在。 @VadimKat 我用更好的逻辑更新了答案。看看吧。

以上是关于在VC 中工具栏的隐藏与显示的主要内容,如果未能解决你的问题,请参考以下文章

菜单栏的VC菜单

屏幕任何地方的工具提示——vc++ express edition

vc6.0 mfc窗口问题

MFC做了一个工具栏点击某个按钮有隐藏和显示功能

滚动选项卡中的片段时隐藏/显示工具栏

WPF版本的EXCEL中工具栏隐藏了怎么让它出现?