2013-06-29 2 views
0

Теперь я назначен для создания программы построения диаграмм/декартовых плоскостей, и мне было предложено сделать это на 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); 

с:

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

в "Graphing поле", кажется diappear. как я исправить это

+0

Вы действительно хотите всплывающее окно, а не только детское окно? –

+0

Я просто хотел получить иллюзию того, что это окно с картинкой, без фреймов, поэтому я подумал, что WS_POPUP поможет мне в этом. –

+0

Думаю, вам будет лучше с WS_CHILD и, возможно, 'WS_BORDER', если вы хотите, чтобы вокруг него была тонкая линия. В любом случае вы не можете использовать 'WS_POPUP' и' WS_CHILD' вместе, как в вашем коде, - [см. Здесь] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632600 (v = vs.85) .aspx). –

ответ

0

Кажется, что всплывающие окна не соответствуют смещению их родителя.

Используйте функцию ClientToScreen для преобразования координат внутри родительского окна в координаты экрана, а затем создайте всплывающее окно с преобразованными координатами.