Articles of c + +

Visual Studio 2013 C ++中的位图透明度

我对这个感到困惑。 我使用在论坛上推荐的程序来将32位PNG转换为带有Alpha通道的32位位图。 我将这些添加到资源编辑器中,并通过工具箱将它们放到一个对话框中。 我已阅读(我认为是广泛的)位图透明度和Visual Studio中的限制。 令我费解的是,我通过Visual Studio资源编辑器将图片控件添加到我的对话框中。 例如,我有两个红色的球,一个在24位的位图,一个在32位的位图。 在Visual Studio的testing模式下,当使用资源编辑器打开.rc时,透明度看起来很好。 但是,当我以编程方式调用DialogBox时,我没有获得透明度。 DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1), NULL, DialogProc); 当我点击Visual Studio中的testingbutton时,它必须调用例程DialogBox或类似的来显示位图。 当我把资源编辑器中的位图放到对话框中时,它显示透明度。 微软是做什么的,我没做什么? 我正在开发没有MFC,故意。 是这样的问题,只有在MFC可以对话框的加载透明度(我意识到它降低到CreateWindowEX)。 我意识到,各种bitblt方法也可以使用。 那是Visual Studio在幕后做的吗? 还审查了WM_CTLCOLORSTATIC等材料。你们都觉得呢? 有没有一些简单的方法来调用DialogBox并获得对话框上的透明的BMP? 或者我们都被迫使用MFC? 或者用户必须编写例程来擦除背景/绘画等 对我来说,看起来有点奇怪,没有透明的图像,对话框很容易。 需要一个非正方形的图像? 这是一个问题。 现在软件工程师必须添加大量的代码到对话callback或程序。 似乎更多的一个bug给我。 谢谢您,对于您的评论。 #include <windows.h> #include <winuser.h> #include "resource.h" INT_PTR CALLBACK DialogProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; switch […]

断点不会被打中。 没有与此行关联的可执行代码

我有一个.h文件中的类: class Blah { public: Blah(){} virtual ~Blah(){} void WriteMessage( bool MessageReceived ) { if(MessageReceived) { cout << "Message Recieved\n"; } } }; 我试图弄清楚为什么我的代码不工作,所以我在WriteMessage()函数内的条件上设置了一个断点,但是一旦我开始在debugging模式下运行项目,断点就会消失,并提示它的工具提示说过: 断点不会被打中。 没有与此行关联的可执行代码。 我不知道为什么发生这种情况,因为其他类的所有其他成员函数在.h文件中执行时工作得很好。 这是什么原因造成的? 编辑:好的,按照要求,这是我正在使用的真实代码的精简版本: VimbaBridgeAPI.h (.dll的头文件) #pragma once #ifdef VIMBABRIDGEAPI_EXPORTS #define VIMBABRIDGEAPI_API __declspec(dllexport) #else #define VIMBABRIDGEAPI_API __declspec(dllimport) #endif #include "AlCamIncludes.h" #include "VimbaSystem.h" //////////////////////////////////////////// // Global Variables /////////////////////// //////////////////////////////////////////// extern HBITMAP […]

如何访问UPnP设备的服务?

设备:Belkin Wemo Switch 开发环境:Windows 7上的MS VC ++ 2010 我想从Windows使用C ++枚举UPnP设备的服务。 我有IUPnPDevice指针,可以访问多个属性。 我有IUPnPServices指针,可以计算正确数量的服务(7)。 我使用QueryInterface()来获取IEnumVARIANT指针(它似乎成功)。 但是, Next()方法始终会失败, HRESULT为0x80040500 – 转换为Windows error 1280 (0x500) – ERROR_ALREADY_FIBER 。 这个错误对我没有任何意义。 (我已经尝试使用IEnumVARIANT和IEnumUnknown – 作为文档表明它可以是,但都产生相同的结果。) 我已经包含在完整的源文件下面,加上它产生的输出。 [注:这是硬编码使用我自己的设备的udn] 如果有人能够帮助,我会很感激,因为我目前被困住了。 最好的祝福, 戴夫 码: // UpnpTest1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <windows.h> #include <upnp.h> static void DumpComError(const […]

Windows.h – 焦点input文本input时的通知

我试图想出一个解决scheme,当焦点进入一个文本字段时build立一个通知。 记住的最终目标是通过屏幕键盘重新创build您在移动设备上看到的functiontypes。 到目前为止,我一直在用EVENT_OBJECT_FOCUS探索SetWinEventHook ,用GUI_CARETBLINKING探索GUI_CARETBLINKING 。 从文档: EVENT_OBJECT_FOCUS 一个对象已经收到键盘焦点。 系统为以下用户界面元素发送此事件:列表视图控件,菜单栏,popup菜单,切换窗口,选项卡控件,树视图控件和窗口对象。 GUI_CARETINKINK插入符的闪烁状态。 如果插入符号可见,则该位置位。 使用这些方法我已经想出了这个解决scheme: void TextInputHelper::setupEventHook(FREContext iCtx) { ctx = iCtx; CoInitialize(NULL); evHook = SetWinEventHook(EVENT_OBJECT_FOCUS, EVENT_OBJECT_END, NULL, handleEventObjectFocus, 0, 0, WINEVENT_OUTOFCONTEXT | WINEVENT_SKIPOWNPROCESS); } void CALLBACK handleEventObjectFocus(HWINEVENTHOOK hook, DWORD evt, HWND hwnd, LONG idObj, LONG idChild, DWORD thread, DWORD time) { GUITHREADINFO threadInfo; threadInfo.cbSize = sizeof(GUITHREADINFO); BOOL […]

C# – 使用File.WriteAllLines

下面的方法会覆盖输出文件(process.txt)吗? private static void CompareOrig() { File.WriteAllLines("process.txt", File.ReadAllLines("process2.txt").Except(File.ReadAllLines("process.txt"))); } 补充信息: 问题是,当从process2.txt读取行时,它们被写入到process.txt文件中,因此覆盖该文件中的所有现有数据。 相反,我怎么能追加输出到process.txt? 例如 File.AppendAllText("process.txt")

为什么不从入口函数调用FreeLibrary?

我正在写一个DLL需要多次dynamic调用一个单独的DLL。 我想保持被调用者加载,然后卸载它,当我的DLL被卸载。 但根据微软的说法,这是一个坏主意 。 入口点函数只应执行简单的初始化任务,不应该调用任何其他的DLL加载或终止函数。 例如,在入口点函数中,您不应该直接或间接调用LoadLibrary函数或LoadLibraryEx函数。 此外,当进程正在终止时,您不应该调用FreeLibrary函数。 这是有问题的代码。 有人可以解释为什么我不应该从DLL的入口点调用LoadLibrary和FreeLibrary? BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_DETACH : if (hLogLib != NULL) FreeLibrary(hLogLib); break; } return TRUE; }

GetTokenInformation()第一次调用。 做什么的?

查看GetDokenInformation()的 MSDN文档和获取loginSID示例,GetTokenInformation()需要被调用两次。 第一个调用是获取缓冲区大小。 那么,缓冲区大小是什么? 只要说我使用TokenUser作为第二个参数,我看到由第一次调用返回的dwReturnLength不是TOKEN_USER结构的大小。 提前致谢

如何刷新或刷新C#Windows窗体?

This is my Entry Form of my Application. 点击确定button,将进入下一个表格进一步处理。我的第二种forms是 在第二个窗体中,我必须select任意一个选项button,然后按下OKbutton。按下OKbutton后,我只是调用一些函数,然后它将返回Form1.But Form1没有得到它的控制几秒钟。看起来像崩溃,需要刷新。但我不知道如何刷新表格? 请指导我摆脱这个问题… 看起来像,

C ++编译器隐式地实例化模板类的所有成员函数是否有效?

假设我有一个公共类和一个私有实现类(例如PIMPL模式),我希望用带有删除检查的模板智能指针类来包装私有类,如下所示: PublicClass.h class PrivateClass; // simple smart pointer with checked delete template<class X> class demo_ptr { public: demo_ptr (X* p) : the_p(p) { } ~demo_ptr () { // from boost::checked_delete: don't allow compilation of incomplete type typedef char type_must_be_complete[ sizeof(X)? 1: -1 ]; (void) sizeof(type_must_be_complete); delete the_p; } private: X* the_p; }; // public-facing class […]

QProcess :: startDetached()不显示控制台窗口

我有一个GUI程序,通过单击button启动cli程序。 我想看看控制台窗口,不需要等到cli程序结束。 所以我使用这样的代码: QProcess::startDetached("cmd.exe"); 点击button后,我看不到控制台窗口。 但是请参阅任务pipe理器中的cmd.exe进程。 我尝试过使用system()命令,但它在cli程序结束之前冻结了我的应用程序。 有没有办法让窗口可见?