gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 02:09:38 25 4
gpt4 key购买 nike

我想删除一些在带有圆角的对话窗口中可见的像素,但我无法在 C++ 中找到任何解决方案

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

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

代码:

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;
}

我使用的是 RGB(255, 128, 255) 颜色,它不会在 Flash 中用作颜色,否则它也会从 Flash 播放器中删除颜色。

提前致谢

最佳答案

  1. 使用 win32 函数创建一个区域。即 CreateEllipticRegion、CreateRectRgn...
  2. 你必须使用 SetWindowRgn。

这是一个link纯 Win32 讨论。这里有一个 link到 MFC 示例。应该很容易将其传输到纯 WinAPI

关于c++从对话框圆角中删除像素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46404512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com