相关疑难解决方法(0)

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

我对这个感到困惑.我使用论坛推荐的程序将32位PNG转换为带alpha通道的32位位图.我将这些添加到资源编辑器并通过工具箱将它们放到Dialog上.我已经阅读了(我认为是广泛的)关于位图透明度和Visual Studio中的限制.
让我感到困惑的是,我通过Visual Studio资源编辑器将图片控件添加到我的对话框中.例如,我有两个红球,一个是24位位图,另一个是32位位图.在visual studio的测试模式下,当使用资源编辑器打开.rc时,透明度看起来很好. 视觉工作室的测试模式

但是,当我以编程方式调用DialogBox时,我没有透明度.

DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DIALOG1),
    NULL, DialogProc);
Run Code Online (Sandbox Code Playgroud)

以编程方式调用DialogBox时的对话框 当我单击Visual Studio中的测试按钮时,它必须调用例程DialogBox或类似的以显示位图.当我将位图放在资源编辑器中的对话框时,它显示透明度.微软做了什么,我没做什么?
我是故意在没有MFC的情况下开发的.这是问题,只有在MFC中才能使用Dialogbox加载透明度(我意识到它缩减为CreateWindowEX).我意识到也可以使用各种bitblt方法.那是Visual Studio在幕后做的吗?还审查了WM_CTLCOLORSTATIC等材料.您有什么想法?是否有一些简单的方法来调用DialogBox并在对话框上获得透明的BMP?或者我们都被迫使用MFC?或者用户必须编写例程来擦除背景/油漆等.

对我而言,如果没有透明图像,对话框很容易,这似乎有点奇怪.需要非方形图像?这在某种程度上是一个问题.现在,软件工程师必须向Dialog Callback或程序添加大量代码.对我来说似乎更多的错误.

谢谢您,对于您的评论.

 #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 (message)
   {
   case WM_COMMAND:
    wmId = LOWORD(wParam);
    wmEvent = HIWORD(wParam);
    // Parse the menu selections:
    switch (wmId)
    {
    case IDOK:
        EndDialog(hwnd, LOWORD(wParam));
        break;
    case IDCANCEL:
        EndDialog(hwnd, LOWORD(wParam));
        return TRUE;

    }

case WM_PAINT:
    break;

case WM_DESTROY:
    EndDialog(hwnd, LOWORD(wParam));
    break;
}
return FALSE; 
} …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi image visual-studio

0
推荐指数
1
解决办法
1727
查看次数

标签 统计

c++ ×1

image ×1

visual-studio ×1

winapi ×1

windows ×1