我正在查看关于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(),但我真的不明白它做了什么(引擎盖下).
我想使用本机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) 最近我了解到如果我需要保留一个块对象,我应该复制块,因为它是在堆栈上创建的.
然后我回顾一下我的一些代码.我发现我做的事情是这样的:
@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