Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;从对话框圆角中删除像素_C++_Winapi_Dialog - Fatal编程技术网

C++ c++;从对话框圆角中删除像素

C++ c++;从对话框圆角中删除像素,c++,winapi,dialog,C++,Winapi,Dialog,我想删除对话框窗口中可见的一些像素,它有圆角,我在c语言中找不到任何解决方案++ 这是我使用的代码,就我所搜索的而言,我认为我需要在WS_EX_LayeredWindow窗口中使用UpdateLayeredWindow函数,而不是SetLayeredWindowAttributes,但我找不到方法 有人知道如何从我的对话框的圆角中删除这些像素吗 代码: 我使用的是RGB(255、128、255)的颜色,它不在flash内部用作颜色,否则它也会从flash播放器内部擦除颜色 提前谢谢 使用win3

我想删除对话框窗口中可见的一些像素,它有圆角,我在c语言中找不到任何解决方案++

这是我使用的代码,就我所搜索的而言,我认为我需要在WS_EX_LayeredWindow窗口中使用UpdateLayeredWindow函数,而不是SetLayeredWindowAttributes,但我找不到方法

有人知道如何从我的对话框的圆角中删除这些像素吗

代码:

我使用的是RGB(255、128、255)的颜色,它不在flash内部用作颜色,否则它也会从flash播放器内部擦除颜色

提前谢谢

  • 使用win32函数创建一个区域。i、 e.CreateEllipticRegion,CreateRectRgn
  • 然后您必须使用SetWindowRgn
    下面是一个纯Win32讨论的示例。这里是一个MFC样本。应该很容易将其传输到WinAPI纯

    查看WinAPI的“屏蔽”或“剪裁区域”。您需要使用:
    CreateRoundRectRgn
    。如果在窗口边缘看到额外的像素,则表示这些像素与指定的透明度颜色不匹配。例如,如果边缘模糊或抗锯齿,或与其他颜色或阴影混合。是的,雷米,你也是正确的。似乎具有透明度和删除WS_EX_分层颜色映射的activex存在一些问题,特别是在圆角处,我找到了两种方法,一种是使用Brandon和xMRi建议的CreateRoundRectRgn,另一种是避免在加载的activex中使用不透明度或alpha混合。不使用阴影、alpha混合和其他在颜色映射方面有问题的效果是一个很好的解决方案,如果没有阴影、alpha混合和其他效果,可能会出现圆边上的一些像素,最好的方法是使用这两种效果。感谢Brandon和xMRi的链接,是的,它通过在flash hwnd上设置一个具有圆角的区域来工作,它删除了不好的像素,但结果是有点像素化的角落,但至少它做到了:)谢谢
    INT_PTR CALLBACK WinProc(HWND hh,UINT mm,WPARAM ww,LPARAM)
        {
        HWND hX = GetDlgItem(hh,123);
    
        switch(mm)
            {
            case WM_INITDIALOG:
                {
                // No Dialog Title Bar 
                SetWindowLong(hh, GWL_STYLE, 0); // With no border around the window 
                // Transparent Dialog In Selected Color
                LONG ExtendedStyle = GetWindowLong(hh, GWL_EXSTYLE);
                SetWindowLong(hh, GWL_EXSTYLE, ExtendedStyle | WS_EX_LAYERED);
                SetLayeredWindowAttributes(hh, RGB(255, 128, 255), 0, LWA_COLORKEY);
                //UpdateLayeredWindow(hh, NULL, NULL, NULL, NULL, NULL, RGB(255, 128, 255), 0, ULW_COLORKEY);
    
                // Load the swf from our resources, extract first to temp path
                TCHAR dx[1000] = {0};
                GetTempPath(1000,dx);
                TCHAR df[1000] = {0};
                GetTempFileName(dx,L"swf",0,df);
                DeleteFile(df);
                wcscat_s(df,1000,L".swf");
                DeleteFile(df);
                ExtractDefaultFile(df,L"flash",0,0,L"data");
    
                SendMessage(hX,AX_INPLACE,1,0);
                SendMessage(hh,WM_SIZE,0,0);
    
                // Set the object
                IShockwaveFlash* p = 0;
                CLSID iidx = __uuidof(IShockwaveFlash);
                HRESULT hr = (HRESULT)SendMessage(hX,AX_QUERYINTERFACE,(WPARAM)&iidx,(LPARAM)&p);
                if (p)
                    {
                    _bstr_t x(df);
                    hr = p->put_WMode(L"transparent");
                    hr = p->put_BackgroundColor(RGB(255,128,255));
                    hr = p->put_Movie(x);
    
                    // Notification
                    AX* iax = (AX*)SendMessage(hX,AX_GETAXINTERFACE,0,0);
                    if (iax)
                        {
                        axCookie = AXConnectObject(iax->OleObject,__uuidof(_IShockwaveFlashEvents),(IUnknown*)&fn,&cpc,&cp);
                        }
    
    
                    p->Release();
                    }
    
                break;
                }
            case WM_SIZE:
                {
                RECT rc;
                GetClientRect(hh,&rc);
                SetWindowPos(hX,0,0,0,rc.right,rc.bottom,SWP_SHOWWINDOW);
                return 0;
                }
    
            case WM_CLOSE:
                {
                EndDialog(hh,0);
                return 0;
                }
            }
        return 0;
        }
    
    int __stdcall WinMain( HINSTANCE hInstance,HINSTANCE,LPSTR,int)
        {
        OleInitialize(0);
        AXRegister();
    
        DialogBox(hInstance,L"DIALOG_MAIN",0,WinProc);
        return 0;
        }