小编use*_*842的帖子

模板别名和专业化

假设我们有

template<typename T> 
struct Foo
{
};

template<typename T> 
struct Bar
{
};

template< template<typename T> class C >
struct Pack
{
    template<typename T>
    using Container = C<T>;
};
Run Code Online (Sandbox Code Playgroud)

正在FooPack<Foo>::Container应该,如果我们有一个专门被当作一回事Foo?那是:

template< template<typename T> class C >
struct IsFoo : std::false_type
{
};

template<>
struct IsFoo<Foo> : std::true_type
{
};

static_assert( IsFoo<Foo>::value,                             "Only foos!" );
static_assert( IsFoo< Pack<Foo>::Container >::value,          "Only foos!" ); // ???
static_assert( IsFoo< Pack<Bar>::Container >::value == false, "Not a foo!" );
Run Code Online (Sandbox Code Playgroud)

第二个断言是否正确?预期的行为是什么?哎呀,我正在努力做甚至有效吗? …

c++

19
推荐指数
1
解决办法
409
查看次数

没有对话框的编辑控件上的SHAutoComplete

我在使用该功能时遇到问题SHAutoComplete.当我在父窗口不是对话框的编辑框中使用它时,它无法正常工作.

自动完成功能似乎工作正常,但下拉列表与基于编辑框中键入的内容的可能候选项的呈现非常混乱.基本上只显示下拉菜单的边框.边框的宽度足以满足可能的建议,但建议本身从未被绘制.即使是下拉列表背景颜色也是错误的.就好像它从未被绘制过并保持原始父窗口颜色.

如果建议的数量足够大,因此下拉列表需要滚动条,滚动条也无法正确呈现 - 箭头不会被绘制.

在这两种情况下,无论是否有滚动条,下拉列表都不接受鼠标输入,即我无法点击这些项目.如果我在显示下拉菜单时按下键盘上的"向下"键,它会按预期工作.在第二次或第三次按下后,项目最终开始出现.但滚动条仍然无法正确呈现.

如果不是注册我自己的Windows类,我只需使用一个对话框::DialogBoxParam(),然后一切按预期进行.自动完成工作完全没有任何问题.

这就是我在做的事情.此代码将注册一个窗口类,创建主窗口,创建一个编辑框,然后调用SHAutoComplete它.它必须与之相关联Shlwapi.lib

// this code must be linked with Shlwapi.lib

#include <Windows.h>
#include <Shlwapi.h>


// name of the class that will be created for the main window
static const char WindowClassName[] = "SHAutoCompleteDoesNotWorkWithoutADialogWindowClassName";


// the main window procedure
static LRESULT CALLBACK WindowProc(
    HWND   hwnd,
    UINT   uMsg,
    WPARAM wParam,
    LPARAM lParam)
{
    switch(uMsg)
    {   
        case WM_CREATE:
        {
            HWND hwndEdit = ::CreateWindowEx(
                0,
                "EDIT",
                0,
                WS_CHILD | WS_VISIBLE,
                10, …
Run Code Online (Sandbox Code Playgroud)

c c++ winapi

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

标签 统计

c++ ×2

c ×1

winapi ×1