Tak zgadzam się z tobą, ale po ustawieniu tego uchwytu nie widzi kontrolki. Problem rozwiązałem w inny sposób, przeniosłem te wszystkie kontrolki (edit) do pętli komunikatów i teraz działa. Pojawił się kolejny problem, w moim programie znajduje się kilka button-ow i po naciśnięciu niezależnie, którego efekt jest taki sam np button C czyści kontrolki, ale to nie tylko on to robi, ale również pozostałe button-y.
#include
#include
HBITMAP bitmapa;
BITMAP info_bitmapy;
HWND hEdit, hEdit1, hEdit2, hEdit3, hEdit4, hEdit5, hEdit6, hEdit7, hEdit8, hEdit9, hEdit10, hEdita, hEditb, hEditaa, hEditbb, hEdits, hEditw, hButton, hButton1, hButton2, hButton3, hButton4, hButton5, hButton6, hButton7, hButton8, hButton9, hButton10, hButton11, hButtonok, hButtonob, hWnd;
HFONT hFont; //uchwyt do czcionki
CHAR szClassName[]="OknoRodzica";
HINSTANCE* hInst;
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lStart,INT nShow)
{
bitmapa=(HBITMAP)LoadImage(0,"tlo.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if(bitmapa==0)
{
MessageBox(0,"Nie można otworzyć pliku bitmap.bmp z folderu z aplikacją","Brak pliku",MB_ICONERROR);
return 0;//zamkniecie programu w razie braku pliku bitmapy
}
GetObject(bitmapa,sizeof(BITMAP),&info_bitmapy);//pobieramy informacje o bitmapie, potrzebujemy jej wymiarów
hInst=&hInstance;
WNDCLASSEX wc;
wc.hInstance=*hInst;
wc.lpszClassName=szClassName;
wc.lpfnWndProc=WndProc;
wc.style=0;
wc.cbSize=sizeof(WNDCLASSEX);
wc.hIcon=LoadIcon(hInstance, MAKEINTRESOURCE(5));
wc.hIconSm=LoadIcon(0,IDI_APPLICATION);
wc.hCursor=LoadCursor(0,IDC_ARROW);
wc.lpszMenuName=(hInstance, MAKEINTRESOURCE(200));
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.hbrBackground=(HBRUSH)COLOR_BACKGROUND;
//pokazanie okna
if(!RegisterClassEx(&wc)) return 0;
hWnd=CreateWindowEx(WS_EX_DLGMODALFRAME,szClassName,"Ważona - ZSP Praszka Sportowa 8 :)",WS_SYSMENU | WS_MINIMIZEBOX,0,0,500,348,0,0,*hInst,0);
ShowWindow(hWnd,nShow);
MSG msgs;
while(GetMessage(&msgs,0,0,0))
{
TranslateMessage(&msgs);
DispatchMessage(&msgs);
}
return msgs.wParam;
}
// obsługa okna dilalogowego
BOOL CALLBACK DlgProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_INITDIALOG:
{
}
break;
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK: EndDialog(hwnd, IDOK); break;
case IDCANCEL: EndDialog(hwnd, IDCANCEL); break;
}
}
break;
default: return FALSE;
}
return TRUE;
}
// osługa zdażeń!
LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wPar,LPARAM lPar)
{
HDC hdc,hdcBitmapy;
//zmienne na 2 konteksty
PAINTSTRUCT ps;
switch(msg)
{
case WM_CREATE:
//tworzymy kontrolkę edit
hEdit=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,32,60,28,25,hwnd,
0,*hInst,0);
hEdit1=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,72,60,28,25,hwnd,
0,*hInst,0);
hEdit2=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,112,60,28,25,hwnd,
0,*hInst,0);
hEdit3=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,152,60,28,25,hwnd,
0,*hInst,0);
hEdit4=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,192,60,28,25,hwnd,
0,*hInst,0);
hEdit5=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,232,60,28,25,hwnd,
0,*hInst,0);
hEdit6=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,272,60,28,25,hwnd,
0,*hInst,0);
hEdit7=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,312,60,28,25,hwnd,
0,*hInst,0);
hEdit8=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,352,60,28,25,hwnd,
0,*hInst,0);
hEdit9=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,392,60,28,25,hwnd,
0,*hInst,0);
hEdit10=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,432,60,28,25,hwnd,
0,*hInst,0);
hEdita=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,172,98,28,25,hwnd,
0,*hInst,0);
hEditaa=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"0,3",
WS_CHILD|WS_VISIBLE,212,98,28,25,hwnd,
0,*hInst,0);
hEditbb=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"0,7",
WS_CHILD|WS_VISIBLE,252,98,28,25,hwnd,
0,*hInst,0);
hEditb=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,291,98,28,25,hwnd,
0,*hInst,0);
hEdits=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,295, 152, 37, 25,hwnd,
0,*hInst,0);
hEditw=CreateWindowEx(WS_EX_CLIENTEDGE,WC_EDIT,"",
WS_CHILD|WS_VISIBLE,340, 152, 130, 25,hwnd,
0,*hInst,0);
//ustawienie czcionki
hFont=CreateFont(0,0,0,0,0,0,0,0,0,0,0,0,0,"Arial");
SendMessage(hEdit,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit1,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit2,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit3,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit4,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit5,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit6,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit7,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit8,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit9,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdit10,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdita,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEditaa,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEditb,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEditbb,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEdits,WM_SETFONT,(WPARAM)hFont,0);
SendMessage(hEditw,WM_SETFONT,(WPARAM)hFont,0);
//tworzymy przycisk
hButton=CreateWindowEx(0,WC_BUTTON,"C",
WS_CHILD|WS_VISIBLE,180,260,30,30,hwnd,(HMENU)1,*hInst,0);
hButton1=CreateWindowEx(0,WC_BUTTON,"1",
WS_CHILD|WS_VISIBLE,13, 220, 20, 30,hwnd,(HMENU)1,*hInst,0);
hButton2=CreateWindowEx(0,WC_BUTTON,"1,5",
WS_CHILD|WS_VISIBLE,40, 220, 30, 30,hwnd,(HMENU)1,*hInst,0);
hButton3=CreateWindowEx(0,WC_BUTTON,"2",
WS_CHILD|WS_VISIBLE,13, 260, 20, 30,hwnd,(HMENU)1,*hInst,0);
hButton4=CreateWindowEx(0,WC_BUTTON,"2,5",
WS_CHILD|WS_VISIBLE,40, 260, 30, 30,hwnd,(HMENU)1,*hInst,0);
hButton5=CreateWindowEx(0,WC_BUTTON,"3",
WS_CHILD|WS_VISIBLE,83, 220, 20, 30,hwnd,(HMENU)1,*hInst,0);
hButton6=CreateWindowEx(0,WC_BUTTON,"3,5",
WS_CHILD|WS_VISIBLE,110, 220, 30, 30,hwnd,(HMENU)1,*hInst,0);
hButton7=CreateWindowEx(0,WC_BUTTON,"4",
WS_CHILD|WS_VISIBLE,83, 260, 20, 30,hwnd,(HMENU)1,*hInst,0);
hButton8=CreateWindowEx(0,WC_BUTTON,"4,5",
WS_CHILD|WS_VISIBLE,110, 260, 30, 30,hwnd,(HMENU)1,*hInst,0);
hButton9=CreateWindowEx(0,WC_BUTTON,"5",
WS_CHILD|WS_VISIBLE,153, 220, 20, 30,hwnd,(HMENU)1,*hInst,0);
hButton10=CreateWindowEx(0,WC_BUTTON,"5,5",
WS_CHILD|WS_VISIBLE,180, 220, 30, 30,hwnd,(HMENU)1,*hInst,0);
hButton11=CreateWindowEx(0,WC_BUTTON,"6",
WS_CHILD|WS_VISIBLE,153, 260, 20, 30,hwnd,(HMENU)1,*hInst,0);
hButtonok=CreateWindowEx(0,WC_BUTTON,"5,5",
WS_CHILD|WS_VISIBLE,180, 220, 30, 30,hwnd,(HMENU)1,*hInst,0);
hButtonob=CreateWindowEx(0,WC_BUTTON,"Oblicz średnią ważoną",
WS_CHILD|WS_VISIBLE,13, 180, 160, 30,hwnd,(HMENU)1,*hInst,0);
hButtonok=CreateWindowEx(0,WC_BUTTON,"Ok",
WS_CHILD|WS_VISIBLE,180, 180, 30, 30,hwnd,(HMENU)1,*hInst,0);
break;
//obsługa przycisków
case WM_COMMAND:
if(((HWND) wPar != hButton))
{
if(wPar==1) SetWindowText(hEdit,"");
if(wPar==1) SetWindowText(hEdit1,"");
if(wPar==1) SetWindowText(hEdit2,"");
if(wPar==1) SetWindowText(hEdit3,"");
if(wPar==1) SetWindowText(hEdit4,"");
if(wPar==1) SetWindowText(hEdit5,"");
if(wPar==1) SetWindowText(hEdit6,"");
if(wPar==1) SetWindowText(hEdit7,"");
if(wPar==1) SetWindowText(hEdit8,"");
if(wPar==1) SetWindowText(hEdit9,"");
if(wPar==1) SetWindowText(hEdit10,"");
if(wPar==1) SetWindowText(hEdita,"");
if(wPar==1) SetWindowText(hEditb,"");
if(wPar==1) SetWindowText(hEdits,"");
if(wPar==1) SetWindowText(hEditw,"");
}
else // obsługa menu
if(LOWORD(wPar) == 106) PostQuitMessage(0);
if(LOWORD(wPar) == 107)
ShellExecute(NULL, "open", "mailto:", NULL, NULL, SW_SHOWNORMAL);
if(LOWORD(wPar) == 104)
ShellExecute(NULL, "open", "", NULL, NULL, SW_SHOWNORMAL);
if(LOWORD(wPar) == 105)
ShellExecute(NULL, "open", "", NULL, NULL, SW_SHOWNORMAL);
if(LOWORD(wPar = 1) == 108)
ShellExecute(NULL, "open", "", NULL, NULL, SW_SHOWNORMAL);
if(LOWORD(wPar) == 100)
ShellExecute(NULL, "open", "Projekt_wazona.exe", NULL, NULL, SW_SHOWNORMAL);
if(LOWORD(wPar) == 103)
int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(200), hwnd, DlgProc);
break;
//obsługa entera
case WM_KEYDOWN:
{
switch((int)wPar)
{
case VK_RETURN:
if(wPar==1) SetWindowText(hEditw,"Enter!");
break;
case VK_ESCAPE:
DestroyWindow(hwnd);
break;
}
}
// Obsługa bitmapy
case WM_PAINT:
hdc=BeginPaint(hwnd,&ps);//kontekst okna uzyskujemy w momencie odrysowywania
hdcBitmapy=CreateCompatibleDC(hdc);//teraz musimy utworzyć kontekst pamięciowy dla bitmapy
bitmapa=(HBITMAP)SelectObject(hdcBitmapy,bitmapa);//zamieniamy konteksty wiążąc bitmapę z kontekstem
//tutaj możemy przeprowadzać jakieś operacje graficzne z naszym kontekstem bitmapy
//uwaga te operacje będą przeprowadzane co każde odświeżenie okna
//wyświetlenie bitmapy na oknie, operacja przekopiowania
BitBlt(hdc,-50,0,info_bitmapy.bmWidth,info_bitmapy.bmHeight,hdcBitmapy,0,0,SRCCOPY);
bitmapa=(HBITMAP)SelectObject(hdcBitmapy,bitmapa);//z powrotem zamieniamy bitmapy w kontekście
DeleteDC(hdcBitmapy);//usuwamy kontekst pamięciowy bitmapy
EndPaint(hwnd,&ps);
break;
case WM_DESTROY: //przed usunięciem okna
DeleteObject(hFont); //zwalniamy czcionkę
DestroyWindow(hEdit); //zwalniamy kontrolke edit
DestroyWindow(hButton); //zwalniamy przycisk
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd,msg,wPar,lPar);
}
return 0;
}