声明如下:
enum DrawBoldMode : unsigned
{
DBM_NONE = 0,
DBM_ITEM = 1<<0, // bold just the nearest line
DBM_SECTION = 1<<1, // bold all lines in the same section
DBM_LINETYPE = 1<<2, // bold all lines of the same line type
DBM_POINTAGE = 1<<3, // bold all lines of the same line type
};
Run Code Online (Sandbox Code Playgroud)
如何导出DrawBoldMode的基础类型(即无符号)?
首先 - 如果已经回答了一百次,我很抱歉!D'哦!
但我的搜索显然很糟糕,因为我没有运气回答这个基本问题:
资源如何存储在EXE/DLL中?作为UNICODE(UCS-2,Windows本机内部字符格式),还是使用资源块代码页的多字节字符?
我只是寻找一般答案或链接到详细信息,而不是将UNICODE字符串放入.rc字符串表的详细方法.谢谢!
我经常发现自己必须定义一个函数的两个版本,以便有一个是const的,一个是非const的(通常是一个getter,但并不总是).两者的不同之处仅在于一个的输入和输出是const,而另一个的输入和输出是非const.功能的胆量 - 真正的工作,是IDENTICAL.
然而,为了保持正确性,我需要它们.作为一个简单的实际示例,请采取以下措施:
inline const ITEMIDLIST * GetNextItem(const ITEMIDLIST * pidl)
{
return pidl ? reinterpret_cast<const ITEMIDLIST *>(reinterpret_cast<const BYTE *>(pidl) + pidl->mkid.cb) : NULL;
}
inline ITEMIDLIST * GetNextItem(ITEMIDLIST * pidl)
{
return pidl ? reinterpret_cast<ITEMIDLIST *>(reinterpret_cast<BYTE *>(pidl) + pidl->mkid.cb) : NULL;
}
Run Code Online (Sandbox Code Playgroud)
如你所见,他们做同样的事情.我可以选择用另一个使用更多的演员来定义一个,如果胆量 - 实际工作,则更为简单:
inline const ITEMIDLIST * GetNextItem(const ITEMIDLIST * pidl)
{
return pidl ? reinterpret_cast<const ITEMIDLIST *>(reinterpret_cast<const BYTE *>(pidl) + pidl->mkid.cb) : NULL;
}
inline ITEMIDLIST * GetNextItem(ITEMIDLIST * pidl)
{
return const_cast<ITEMIDLIST *>(GetNextItem(const_cast<const ITEMIDLIST …Run Code Online (Sandbox Code Playgroud) Windows shell编程的基本思想是,您可以将给定的文件类型(扩展名)与MS当前调用的编译器(例如,Company.Type.Ver)相关联:
HKCR\.txt @ = Acme.Text.1
HKCR\Acme.Text.1 @ =这是Acme文本文件关联的progid
然后Acme Corp可以将尽可能多的shell动词作为HKCR\Acme.Text.1\shell的子键,例如HKCR\Acme.Text.1\shell\open.
但如果我是XyzCorp,如何在文本文件中添加辅助动词?
我不想篡夺主文件关联 - 我很高兴它与Acme.Text.1相关联,但我想添加"导入到Xyz编辑器".
我可以:
1.向Acme的progid添加一个动词(例如HKCR\Acme.Text.1\shell\my-verb)
2.代表我们创建一个新的progid并将Acme的数据复制到那个,并将XyzCorp的动词合并到
3.将动词直接添加到文件扩展名(至少有一个曾经能够这样做)
4.???
有谁知道这个"正确"的答案?
编辑:我真的不喜欢任何涉及修改别人的PROGID的解决方案.我真的更愿意在相关的PROGID之外添加一些东西 - 一个IContextMenu或其他任何东西,以便为给定的文件类型添加额外的动词/选项.
似乎这样一个疯狂的系统有ext-> progid,其中progid由个别开发公司拥有,并且可以随意删除或更改.这让我觉得很脆弱(卸载东西和poof,你的文件扩展名停止正常工作,或安装一些东西,同样你的辅助动词消失,因为ext现在映射到一个不同的专有PROGID,我没有添加我们的动词安装(当时,不知道任何关于这个其他尚未存在的程序)),而且只是愚蠢.在所有这些时间之后,所有这些版本的Windows和Microsoft从未找到过为给定文件类型提供多层处理程序的方法?真?!?
我发现那令人惊叹!初级编程101涉及学习命令模式或其他分层/级联系统.Windows WinProcs本身是以命令模式模式组织的 - 因此从内部窗口上下文到外部,许多可能的处理程序在给定的MSG中被给予破解.
当然有一种方法可以添加一个适用于多个扩展的动词,而不会覆盖扩展的主要progid关联,它本身完全独立于主扩展 - > progid映射(这样用户可以随着时间的推移安装多个程序,并且仍然有权访问该文件类型的辅助动词).
我想我可以看看HKCR.*...我理解可以在那里添加适用于所有文件类型的动词.但是,我需要找到一些方法来过滤,这样我们的动词才真正存在于我们应该应用的实际文件类型中......
这是我工作中一个长期存在的问题,我意识到我仍然没有一个很好的解决方案......
C天真地为int定义了它的所有字符测试函数:
int isspace(int ch);
Run Code Online (Sandbox Code Playgroud)
但是char经常被签名,并且一个完整的角色通常不适合int,或任何用于字符串******的单个存储单元.
这些函数已成为当前C++函数和方法的逻辑模板,并为当前的标准库奠定了基础.事实上,他们仍然得到了支持.
因此,如果您使用isspace(*pchar),最终可能会出现符号扩展问题.他们很难看到,因此根据我的经验他们很难防范.
类似地,因为isspace()和它的所有类型都是内联的,并且因为字符串的实际宽度通常是未知的,而不是字符串分析 - 这意味着任何现代字符库本质上都不应该在char或wchar_t周围运行但只有指针/迭代器,因为只有通过分析字符流才能知道它有多少组成一个逻辑字符,我对如何最好地处理这些问题感到有些不知所措?
我一直期待一个真正强大的库,它基于抽象出任何字符的大小因素,并且只使用字符串(提供诸如isspace之类的东西等),但要么我错过了,要么是另一个更简单的解决方案盯着我面对所有人(谁知道你在做什么)使用......
**这些问题不适用于可以完全包含完整字符的固定大小的字符编码 - UTF-32显然是唯一具有这些特征的选项(或将自己限制为ASCII或某些特殊情况的专用环境) .
"你如何以不受两个问题影响的方式测试空白,可打印等等:
1)符号扩展,以及
2)可变宽度字符问题
毕竟,大多数字符编码都是可变宽度:UTF-7,UTF-8,UTF-16,以及Shift-JIS等旧标准.如果编译器将char视为带符号的8位单元,即使扩展的ASCII也会出现简单的符号扩展问题.
无论char_type的大小是多少,对于大多数字符编码方案来说都是错误的.
这个问题出现在标准C库以及C++标准库中; 仍尝试传递char和wchar_t,而不是各种isspace,isprint等实现中的字符串迭代器.
实际上,正是这些类型的函数破坏了std :: string的通用性.如果它只在存储单元中工作,并且没有试图假装将存储单元的含义理解为逻辑字符(例如isspace),那么抽象将更加诚实,并且会迫使程序员看起来其他有效的解决方案......
参与的每个人.在这个讨论和WChars之间,编码,标准和可移植性我对这些问题有了更好的处理.虽然没有简单的答案,但每一点理解都有帮助.
也许我记得Borland的编译器?但我似乎记得有能力设置"如果遇到X错误就停止编译" - 或者其他一些.
VS2008已经停止了100次错误.但是我已经修复了第一对,并且点击了save,这导致编译器警告我在编译时保存 - 它被阻止甚至创建这种情况.
要么:停止编译~10个错误,或者:当我点击保存(编译期间)时停止编译.
我发现没有允许上述任何一种情况的设置,但也许这里有人知道它们是否以及在哪里?
在Win32下,通过执行以下操作,从位图生成单色位掩码以实现透明度使用是一种常见技术:
SetBkColor(hdcSource, clrTransparency);
VERIFY(BitBlt(hdcMask, 0, 0, bm.bmWidth, bm.bmHeight, hdcSource, 0, 0, SRCCOPY));
Run Code Online (Sandbox Code Playgroud)
这假定hdcSource是保存源图像的内存DC,而hdcMask是一个内存DC,它保存相同大小的单色位图(因此两者都是32x32,但源是4位颜色,而目标是1位单色).
但是,当源为32位颜色+ alpha时,这对我来说似乎失败了.我得到的是一个全黑的面具,而不是在hdcMask中获得单色位图.没有位设置为白色(1).而这适用于4位彩色光源.
我的搜索foo失败了,因为我似乎找不到任何对这个特定问题的引用.
我已经发现这确实是我的代码中的问题:即如果我使用16色(4位)的源位图,它可以工作; 如果我使用32位图像,它会产生全黑色蒙版.
在32位彩色图像的情况下,我应该使用另一种方法吗?alpha通道是否存在覆盖上述技术正常行为的问题?
感谢您提供的任何帮助!
ADDENDUM:我仍然无法找到为我的GDI +生成的源位图创建有效单色位图的技术.
根本没有生成单色位掩码,我有点缓解了我的特殊问题,而是我正在使用TransparentBlt(),这似乎是正确的(但我不知道他们在内部做了什么,这是任何不同的允许他们正确掩盖图像).
拥有一个非常好的,有效的功能可能是有用的:
HBITMAP CreateTransparencyMask(HDC hdc, HBITMAP hSource, COLORREF crTransparency);
Run Code Online (Sandbox Code Playgroud)
无论hSource的颜色深度如何,它始终创建有效的透明蒙版.
想法?
我很惊讶 VisualStudio 2015 坚持将WORD( unsigned short) 提升为 anunsigned int当仅WORD值涉及仅位操作时。(即在执行 16bit | 16bit 时将 16 位提升到 32 位)。
例如
// where WORD is a 'unsigned short'
const WORD kFlag = 1;
WORD old = 2;
auto value = old | kFlag; // why the blazes is value an unsigned int (32 bits)
Run Code Online (Sandbox Code Playgroud)
此外,有没有办法获得 0x86 内在函数WORD|WORD?我当然不想为 (16->32|16->)->16 买单。这段代码也不需要消耗超过几个 16 位寄存器,而不是几个 32 位寄存器。
但注册表的使用实际上只是一个旁白。欢迎优化器为所欲为,只要结果对我来说是无法区分的。(即它不应该以可见的方式改变大小)。
对我来说的主要问题是使用 flags|kFlagValue 会产生更广泛的实体,然后将其泵入模板会给我一个类型不匹配错误(模板比我想进入这里的时间要长得多,但关键是它需要两个参数,它们应该在类型上匹配,或者可以简单地转换,但不是,由于这个自动大小提升规则)。
如果我可以访问“保守位处理函数集”,那么我可以使用:
flag non-promoting-bit-operator kFlagValue
Run Code Online (Sandbox Code Playgroud)
为了达到我的目的。
我想我必须去写那个,或者到处使用强制转换,因为这个不幸的规则。
在这种情况下,C++ …
我注意到这些年来已经出现过几次问题,而且在我们目前的版本中,Windows 7下似乎发生了很多问题.
当我测试文件是否存在时,使用:: GetFileAttributes(filename),我经常返回INVALID_FILE_ATTRIBUTES,而GetLastError()是ERROR_PATH_NOT_FOUND(3).
然而,该文件不存在,存在的路径,体积存在 - 它的H:\富\酒吧 - 这是我的机器上映射至H网络共享文件夹:.
如果我打开命令窗口,它可以看到它.如果我使用Windows资源管理器导航到该文件夹,它可以看到它.
如果我在运行我们的应用程序之前这样做,我们可以看到它.
但是,如果我首先运行我们的应用程序,重启后,在尝试查看H:\之前,我会反复得到上述错误.
在我看来,Windows正在"帮助"我立即返回ERROR_PATH_NOT_FOUND,当给定的共享映射尚未重新连接此会话时(它被设置为自动重新连接).不用说,这很烦人.是否有另一个API调用我可以"确定文件/文件夹X是否存在?"
_SH_DENYWR拒绝任何其他尝试打开具有写权限的文件(共享冲突)_SH_SECURE设置安全模式(共享读取,独占写访问)
_SH_SECURE似乎更新,基于这样一个事实,即文档似乎掩盖它或根据你看的位置省略它.几乎没有关于我能在网上找到的网上的信息.
那些有什么不同?