winapi c++ GetAncestor/GetParent
winapi c++ GetAncestor/GetParent
我尝试将bmp
转换为ico
转换器。我对GetParent
/GetAncestor
功能有问题。以下是我的代码的一些片段:
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hWndAbout;
switch (message)
{
/* ... */
hWndAbout = CreateDialog(hInst, MAKEINTRESOURCE(KONWERTER_DIALOG_ABOUT), hwnd, AboutDlgProc);
ShowWindow(hWndAbout, SW_SHOW);
}
}
这是从朱尔尼开始到另一部分的一部分:
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
break;
case WM_PAINT:
HWND hwndParent;
HDC hDCParent;
hwndParent = GetAncestor(hDlg, GA_PARENT); //hwndParent = GetParent(hDlg); //hwndParent = GetRealParent(hDlg);
hDCParent = GetDC(hwndParent);
hDC1 = GetDC(hDlg);
if (g_Checked1)StretchBlt(hDC1, 0, 0, 16, 16, hDCParent, 0, 0, 600, 600, SRCCOPY);
if (g_Checked2)StretchBlt(hDC1, 0, 0, 32, 32, hDCParent, 0, 0, 600, 600, SRCCOPY);
if (g_Checked3)StretchBlt(hDC1, 0, 0, 64, 64, hDCParent, 0, 0, 600, 600, SRCCOPY);
create_icon(hDlg);
ReleaseDC(hDlg, hDC1);
ReleaseDC(hwndParent, hDCParent);
break;
/* ... */
}
}
我想hwndParent
成为hwnd
处理程序,但它变成了桌面处理程序。
怎么了?
我如何想象我的想法?
正如你所看到的,我的StreachBlt
画了桌面的一部分,而不是我可爱的脸。我已经尝试使用给出相同结果的GetParent
。谢谢你的帮助。
谢谢你的帮助。一些建议帮助我了解我的问题。我通过将 CreateDialog() 更改为 CreateDialogParam() 来解决它,并使用 lParam 参数传递父处理程序:
hWndAbout = CreateDialogParam(hInst, MAKEINTRESOURCE(KONWERTER_DIALOG_ABOUT), hwnd, AboutDlgProc, (LPARAM)hwnd);
ShowWindow(hWndAbout, SW_SHOW);
在子窗口中,我用来获取处理程序WM_INITDIALOG:
case WM_INITDIALOG:
hwndParent = (HWND)lParam;
break;