小编Mor*_*ang的帖子

什么是multimap :: emplace()和move()?

我正在查看关于multimap的MSDN文档,并发现它有一个成员函数multimap :: emplace().以下是该成员函数的示例.

int main( ) {
   using namespace std;
   multimap<int, string> m1;
   pair<int, string> is1(1, "a");

   m1.emplace(move(is1));
}
Run Code Online (Sandbox Code Playgroud)

看来,emplace()move()是C++ 0x中.有人可以帮我解释一下吗?我读到了move(),但我真的不明白它做了什么(引擎盖下).

c++ stl multimap rvalue-reference c++11

11
推荐指数
1
解决办法
1723
查看次数

如何在不受工具限制的情况下使用Windows ToolTip Control

我想使用本机windows工具提示控件(纯Win32 API,没有MFC的东西).

我阅读了文档,似乎我必须发送一条TTM_ADDTOOL消息来将工具绑定到工具提示控件.只有在那之后我才能发送TTM_TRACKACTIVATE和TTM_TRACKPOSITION来显示工具提示.

但我想在任何我想要的地方显示工具提示.例如,当鼠标悬停在我窗口的某个区域上时.这个区域不是Windows眼中的工具,它只是我窗口中的一个区域.

也许我可以将窗口绑定到工具提示控件,但是,这是不是意味着我必须将我创建的每个窗口绑定到工具提示控件?

是否有一个简单的解决方案,以便我不必为每个窗口发送TTM_ADDTOOL消息?


我实际上写了一些代码,但工具提示似乎没有出现.安德斯的回答实际上解决了一些问题.在我查看代码之后,我就让它工作了.

如果有人想知道它是如何工作的:

HWND toolTipWnd = ::CreateWindowExW(WS_EX_TOPMOST,
            TOOLTIPS_CLASSW,0,WS_POPUP | TTS_NOPREFIX | TTS_ALWAYSTIP,
        CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
        0,0,appHandle,0);

TOOLINFOW ti = {};
ti.cbSize = sizeof(TOOLINFOW);
ti.uFlags = TTF_ABSOLUTE | TTF_IDISHWND /* | TTF_TRACK */; // Don't specify TTF_TRACK here. Otherwise the tooltip won't show up.
ti.hwnd   = toolTipWnd; // By doing this, you don't have to create another window.
ti.hinst  = NULL;
ti.uId    = (UINT)toolTipWnd;
ti.lpszText = L"";

::SendMessageW(toolTipWnd, TTM_ADDTOOLW, 0, (LPARAM)&ti);
::SendMessageW(toolTipWnd, TTM_SETMAXTIPWIDTH,0, (LPARAM)350);
Run Code Online (Sandbox Code Playgroud)

这将创建一个工具提示窗口,该窗口未绑定到任何其他窗口.因此,当您想要显示工具提示时(例如,在响应WM_MOUSEHOVER消息时),请调用:

TOOLINFOW ti …
Run Code Online (Sandbox Code Playgroud)

c++ windows controls tooltip

10
推荐指数
1
解决办法
9548
查看次数

iOS块对象没有复制?

最近我了解到如果我需要保留一个块对象,我应该复制块,因为它是在堆栈上创建的.

然后我回顾一下我的一些代码.我发现我做的事情是这样的:

@implementation MyView
...
-(void) addButton:(NSString *)title clickAction:(void ^(void)) action {
    [self.buttons addObject:@[ title, action ] ];
}
-(void) createButtons { ... }
...
@end

...

// Somewhere in my project:
-(void) init {
     MyView *view = [MyView new];
     [view addButton:@"OK"     clickAction:^{ NSLog(@"OK");     }];
     [view addButton:@"Cancel" clickAction:^{ NSLog(@"Cancel"); }];
}
Run Code Online (Sandbox Code Playgroud)

基本上,我向MyView添加了一些按钮信息.在某些时候,MyView将创建按钮.单击该按钮时,MyView将找到相应的clickAction,并调用它.

奇怪的是,这个程序工作正常,没有例外,没有错误.

那么,为什么程序运行而不复制块对象?

其他信息:*iPhone应用程序(4.3 - 6.0)*非ARC*XCode 4.5

block objective-c ios

3
推荐指数
1
解决办法
983
查看次数

标签 统计

c++ ×2

block ×1

c++11 ×1

controls ×1

ios ×1

multimap ×1

objective-c ×1

rvalue-reference ×1

stl ×1

tooltip ×1

windows ×1