Discussione:
Programmazione C/C++ Problema con le finestre winapi
(troppo vecchio per rispondere)
Nero23
2014-01-11 22:15:51 UTC
Permalink
Sistema operativo Windows 8 a 64 Bit Linguaggio di programmazione C/C++.

Con Codeblocks non riesco a visualizzare una finestra con le api di
windows se queste sono realizzate utilizzando il file .RC (in poche
parole, i Dialod boxes).

Nessun problema se creo la finestra utilizzando la classica funzione
CreateWindowEx...


Sapete darmi una dritta?

Grazie

nero23


Riporto il codice....




// FILE main.c
#include <windows.h>
#include "resource.h"

BOOL CALLBACK DialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (msg)
{
case WM_DESTROY: PostQuitMessage(0);
return TRUE;
case WM_CLOSE:
DestroyWindow (hwnd);
return TRUE;
}

return FALSE;
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char *
cmdParam, int cmdShow)
{
HWND handle = 0;
handle = CreateDialog (hInst, MAKEINTRESOURCE (IDD_DIALOG1), 0,
(DLGPROC)DialogProc);

if (!handle)
{
MessageBox(NULL, "Dialog Box", "Errore!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(handle, cmdShow);
UpdateWindow(handle);

MSG message;
while(GetMessage(&message, NULL, 0, 0) > 0)
{
TranslateMessage(&message);
DispatchMessage(&message);
}

return message.wParam;
}






// FILE resource.h
#define IDD_DIALOG1 101
#define IDC_BUTTON1 1007
#define IDC_BUTTON2 1008
#define IDC_BUTTON3 1009







// FILE fileRC.rc
#include "resource.h"
#include "afxres.h"


IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 100, 100

STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
BEGIN
PUSHBUTTON "Pulsante 1",IDC_BUTTON1 ,10,10,40,20
PUSHBUTTON "Pulsante 2",IDC_BUTTON2 ,10,30,40,20
PUSHBUTTON "Pulsante 3",IDC_BUTTON3 ,10,50,40,20
END
xnoise
2014-01-13 18:53:14 UTC
Permalink
Il 11/01/2014 23:15, Nero23 ha scritto:> Con Codeblocks non riesco a
visualizzare una finestra con le api di
Post by Nero23
windows se queste sono realizzate utilizzando il file .RC (in poche
parole, i Dialod boxes).
Il codice mi sembra corretto. Bisognerebbe dare un'occhiata al file RC.
Hai provato a vedere se l'handle ritornato dalla CreateDialog e' valido ?
acc
2014-01-13 22:36:48 UTC
Permalink
Il 11/01/2014 23.15, Nero23 ha scritto:

Aggiunto/tolto qualcosina, ma ci credo poco, penso piu' ad un problema
di CodeBlocks (che non ho). Con VS2008 funziona.
Post by Nero23
// FILE main.c
#include <windows.h>
#include "resource.h"
BOOL CALLBACK DialogProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
switch (msg) {
case WM_INITDIALOG: return TRUE;
Post by Nero23
case WM_DESTROY: PostQuitMessage(0); return TRUE;
case WM_CLOSE: DestroyWindow (hwnd); return TRUE;
}
return FALSE;
}
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, char* cmdParam, int cmdShow) {
HWND hDlg = CreateDialog(hInst, MAKEINTRESOURCE (IDD_DIALOG1), 0, (DLGPROC)DialogProc);
if (! hDlg) {
MessageBox(NULL, "Dialog Box", "Errore!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hDlg, cmdShow);
UpdateWindow(hDlg); // <- serve? uhm... no, toglilo.
Post by Nero23
MSG message;
while (GetMessage(&message, NULL, 0, 0) > 0) {
if (! IsDialogMessage(hDlg,&msg)) {
Post by Nero23
TranslateMessage(&message);
DispatchMessage(&message);
}
Post by Nero23
}
return message.wParam;
}
// FILE resource.h
#define IDD_DIALOG1 101
#define IDC_BUTTON1 1007
#define IDC_BUTTON2 1008
#define IDC_BUTTON3 1009
// FILE fileRC.rc
#include "resource.h"
#include "afxres.h" // <- sicuro che sia ok?
// prova a sostituirlo con #include <windows.h>
// dovrebbe bastare
Post by Nero23
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 100, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
// uh WS_CAPTION ?
CAPTION "E metticelo allora!"
Post by Nero23
BEGIN
PUSHBUTTON "Pulsante 1",IDC_BUTTON1 ,10,10,40,20
PUSHBUTTON "Pulsante 2",IDC_BUTTON2 ,10,30,40,20
PUSHBUTTON "Pulsante 3",IDC_BUTTON3 ,10,50,40,20
END
xnoise
2014-01-14 08:37:59 UTC
Permalink
***** ShowWindow(handle, cmdShow);
***** UpdateWindow(handle);
IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 100, 100
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU ****|WS_VISIBLE****
BEGIN
PUSHBUTTON "Pulsante 1",IDC_BUTTON1 ,10,10,40,20
PUSHBUTTON "Pulsante 2",IDC_BUTTON2 ,10,30,40,20
PUSHBUTTON "Pulsante 3",IDC_BUTTON3 ,10,50,40,20
END
Elimina le chiamate a ShowWindow e UpdateWindow ed inserisci il flag
VS_VISIBLE nello stile della finestra.

Loading...