C 把窗放在窗内

C 把窗放在窗内,c,winapi,window,parent-child,C,Winapi,Window,Parent Child,我现在被指派制作一个图形/笛卡尔平面制作程序,我被要求用C语言,或者更准确地说,在Win32中,我有一个小问题,我想在我的窗口中放置一个弹出窗口作为临时图形字段,问题是当我创建窗口时,应该是“图形字段”显示在主/父窗口外,并且似乎使用整个屏幕作为其位置的参考,而不是指定的父/主窗口: HWND DrawGrap(HWND hwnd) { LPSTR nme = "graph"; WNDCLASSEX c; c.style = CS_VREDRAW|CS_HREDRAW; c.lpfnWndPro

我现在被指派制作一个图形/笛卡尔平面制作程序,我被要求用C语言,或者更准确地说,在Win32中,我有一个小问题,我想在我的窗口中放置一个弹出窗口作为临时图形字段,问题是当我创建窗口时,应该是“图形字段”显示在主/父窗口外,并且似乎使用整个屏幕作为其位置的参考,而不是指定的父/主窗口:

HWND DrawGrap(HWND hwnd)
{
LPSTR nme = "graph";
WNDCLASSEX c;
c.style = CS_VREDRAW|CS_HREDRAW;
c.lpfnWndProc = MathProc;
c.cbClsExtra = 0;
c.cbWndExtra = 0;
c.hInstance = GetModuleHandle(NULL);
c.hIcon = LoadIcon(NULL,IDI_APPLICATION);
c.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
c.hCursor = LoadCursor(NULL,IDC_ARROW);
c.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
c.lpszMenuName = NULL;
c.lpszClassName = nme;
c.cbSize = sizeof(c);

RegisterClassEx(&c);

return CreateWindowEx(0,nme,"",WS_VISIBLE|WS_POPUP|WS_CHILD,
                      10, 10,
                      460,200,hwnd,NULL,GetModuleHandle(NULL),0);

 }
 void InitializeUI(HWND hwnd)
{       
    //Graph
    DrawGrap(hwnd);
    //GroupBoxes for coordinate inputs
    P1BOX = CreateWindowEx(0,"BUTTON","Point 1",
                        WS_VISIBLE|WS_CHILD|BS_GROUPBOX,
                        10,230,225,120,hwnd,(HMENU)111,
                        GetModuleHandle(NULL),0);                       
    P2BOX = CreateWindowEx(0,"BUTTON","Point 2",
                        WS_VISIBLE|WS_CHILD|BS_GROUPBOX,
                        250,230,225,120,hwnd,(HMENU)112,
                        GetModuleHandle(NULL),0);

    //Coordinate Labels:
    CreateLabel("X :",P1BOX,30);
    CreateLabel("Y :",P1BOX,80);
    CreateLabel("X :",P2BOX,30);
    CreateLabel("Y :",P2BOX,80);                
    //Input boxes
    hP1X = CreateBox(P1BOX,40,30,P1X);
    hP1Y = CreateBox(P1BOX,40,80,P1X);
    hP2X = CreateBox(P2BOX,40,30,P1X);
    hP2Y = CreateBox(P2BOX,40,80,P1X);

    //buttons
    CreateButton("Gen. Equation",125,360,hwnd,GENEQBTN);
    CreateButton("Point-Slope",255,360,hwnd,PSLOPEBTN);
    CreateButton("Slope-intercept",125,395,hwnd,SINTERCEPTBTN);
    CreateButton("Intercept",255,395,hwnd,INTERCEPTBTN);
    CreateButton("Slope",195,430,hwnd,SLOPEBTN);
 }
但是,当我替换中的NULL时:

return CreateWindowEx(0,nme,"",WS_VISIBLE|WS_POPUP|WS_CHILD,
                      10, 10,
                      460,200,hwnd,NULL,GetModuleHandle(NULL),0);
与:


“绘图领域”似乎陷入了困境。如何修复此问题

弹出窗口似乎不尊重其父窗口的偏移量


使用函数将父窗口内的坐标转换为屏幕坐标,然后使用转换后的坐标创建弹出窗口。

您确定要弹出窗口而不仅仅是子窗口吗?我只是想得到一个没有边框的图片框的错觉,所以我认为WS_弹出窗口会帮我做到这一点。我认为你最好使用
WS_CHILD
或者
WS_BORDER
,如果你想在它周围画一条细线的话。在任何情况下,您都不能像在代码中一样同时使用
WS_弹出窗口
WS_CHILD
return CreateWindowEx(0,nme,"",WS_VISIBLE|WS_POPUP|WS_CHILD,
                      10, 10,
                      460,200,hwnd,(HMENU)443,GetModuleHandle(NULL),0);