Już sobie to poskładałem do kupy i śmiga więc mogę sobie analizować :)
Ale mam taką nie zrozumiałą sytuację. Bo gdy coś zmienię w pliku *.rc to wyskakuje mi błąd podczas próby kompilowania, a jak kliknę znów żeby kompilowało to rzekomego błędu nie ma, a całość kompiluje się bez problemu.
Kod:
#include <windows.h>
LPSTR NazwaKlasy = "Klasa Okienka";
MSG msg;
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK DlgProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
//WYPEŁNIANIE STRUKTURY
WNDCLASSEX wc;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName = NULL;
wc.lpszClassName = NazwaKlasy;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
//REJESTROWANIE KLASY OKNA
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Wysoka Komisja odmawia rejestracji tego okna!", "Niestety...", MB_ICONEXCLAMATION | MB_OK);
return 1;
}
//TWORZENIE OKNA
HWND hwnd;
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, NazwaKlasy, "Oto okienko", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL);
HWND hPrzyc = CreateWindowEx(0, "BUTTON", "Dialog", WS_CHILD | WS_VISIBLE,
5,5,50,25, hwnd, NULL, hInstance, NULL);
if(hwnd==NULL)
{
MessageBox(NULL, "Okno odmówiło przyjścia na świat!", "Ale kicha...", MB_ICONEXCLAMATION);
return 1;
}
//Tworzymy jakiś przycisk do wywołania dialogu
//Pokazujemy główne okno
ShowWindow(hwnd, nCmdShow); //Pokaż okienko...
UpdateWindow(hwnd);
//No i standardowo - pętelka
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//Procedura okna
LRESULT CALLBACK WndProc(HWND hwnd, UINT mesg, WPARAM wParam, LPARAM lParam)
{
switch(mesg)
{
case WM_COMMAND:
{
//Tutaj wywołujemy nasz dialog
int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(200), hwnd, DlgProc);
if(ret == IDOK)
MessageBox(hwnd, "Wybrałeś 'Fajnie' w oknie dialogowym!", "Test", MB_ICONINFORMATION);
else if(ret == IDCANCEL)
MessageBox(hwnd, "Wybrałeś 'Anuluj' w oknie dialogowym!", "Test", MB_ICONINFORMATION);
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, mesg, wParam, lParam);
}
return 0;
}
//Procedura dialogowa
BOOL CALLBACK DlgProc(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
{
case WM_COMMAND:
{
//reakcja na przyciski
switch(LOWORD(wParam))
{
case IDOK: EndDialog(hwnd, IDOK); break;
case IDCANCEL: EndDialog(hwnd, IDCANCEL); break;
}
}
break;
default: return FALSE;
}
return TRUE;
}
Plik zasobów (BezNazwy1.rc):
#include <windows.h>
#include "dialog.h"
#define IDD_MOJDIALOG 200
#define IDC_LABEL 201
IDD_MOJDIALOG DIALOG DISCARDABLE 20, 20, 200, 66
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Mójs własny dialog"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "&Fajnie!",IDOK,124,18,50,14
PUSHBUTTON "&Anuluj",IDCANCEL,124,35,50,14
LTEXT "To jest okno dialogowe",IDC_LABEL,16,18,80,33
}
Tu czepia się drugiej linii
Oraz otwiera plik:
Projekt1_private.rc i czepia się linii : #include "BezNazwy1.rc"
Jak wcześniej wspomniałem po ponownej próbie kompilowania problemów nie ma. Problem powtarza się gdy zmienię co kolwiek w pliku BezNazwy1.rc
O co może biegać ?