Original Post
can someone tell me what''s wrong with this program? i''m new to win32 so i just copied it from a tutorial on the internet. it compiles fine, but when i click on any menu item then nothing happens.
win32.cpp:
resource.rc:
resource.h:
i''m using dev-c++ 5 beta 3 (4.9.3.0). It comes with version 2.95.3-6 (mingw special) of the free mingw compiler.
-Kavalants
#include <windows.h>
#include "resource.h"
const char ClassName[] = "WindowClass";
//prototypes
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
void FileOpen(HWND hwnd);
void FileSave(HWND hwnd);
BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR FileName);
BOOL SaveTextFileFromEdit(HWND hEdit, LPCTSTR FileName);
//begin program
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASSEX wc;
HWND hwnd;
MSG Msg;
wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
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 = MAKEINTRESOURCE(IDM_FILE);
wc.lpszClassName = ClassName;
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if(!RegisterClassEx(&wc))
{
MessageBox(NULL, "Window Registration Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
hwnd = CreateWindowEx(
WS_EX_CLIENTEDGE,
ClassName,
"Window 1",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
NULL, NULL, hInstance, NULL);
if(hwnd == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
return 0;
}
ShowWindow(hwnd, SW_SHOWNORMAL);
UpdateWindow(hwnd);
while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch(msg)
{
case WM_CREATE:
{
HGDIOBJ hfDefault;
HWND hEdit;
hEdit = CreateWindowEx( WS_EX_CLIENTEDGE, "EDIT", "",
WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL |
ES_AUTOHSCROLL, 0, 0, 100, 100, hwnd, (HMENU)IDC_MAIN_EDIT, GetModuleHandle(NULL),
NULL);
if(hEdit == NULL)
MessageBox(NULL, "Window Creation Failed!", "Error!", MB_ICONEXCLAMATION | MB_OK);
hfDefault = GetStockObject(DEFAULT_GUI_FONT);
SendMessage(hEdit, WM_SETFONT, (WPARAM)hfDefault, MAKELPARAM(FALSE, 0));
}
break;
case WM_SIZE:
{
HWND hEdit;
RECT rcClient;
GetClientRect(hwnd, &rcClient);
hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
SetWindowPos(hEdit, NULL, 0, 0, rcClient.right, rcClient.bottom, SWP_NOZORDER);
}
break;
case WM_CLOSE:
DestroyWindow(hwnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(LOWORD(lParam))
{
case ID_FILE_EXIT:
PostMessage(hwnd, WM_CLOSE, 0, 0);
break;
case ID_FILE_NEW:
SetDlgItemText(hwnd, IDC_MAIN_EDIT, "");
break;
case ID_FILE_OPEN:
FileOpen(hwnd);
break;
case ID_FILE_SAVE:
FileSave(hwnd);
break;
}
break;
default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;
}
void FileOpen(HWND hwnd)
{
OPENFILENAME ofn;
char FileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
ofn.lpstrFile = FileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.lpstrDefExt = "txt";
if(GetOpenFileName(&ofn))
{
HWND hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
LoadTextFileToEdit(hEdit, FileName);
}
}
void FileSave(HWND hwnd)
{
OPENFILENAME ofn;
char FileName[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0";
ofn.lpstrFile = FileName;
ofn.nMaxFile = MAX_PATH;
ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
ofn.lpstrDefExt = "txt";
if(GetSaveFileName(&ofn))
{
HWND hEdit = GetDlgItem(hwnd, IDC_MAIN_EDIT);
SaveTextFileFromEdit(hEdit, FileName);
}
}
BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR FileName)
{
HANDLE hFile;
BOOL Success = FALSE;
hFile = CreateFile(FileName, GENERIC_READ, FILE_SHARE_READ, NULL,
OPEN_EXISTING, 0, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD FileSize;
FileSize = GetFileSize(hFile, NULL);
if(FileSize != 0xFFFFFFFF)
{
LPSTR FileText;
(HGLOBAL)FileText = GlobalAlloc(GPTR, FileSize + 1);
if(FileText != NULL)
{
DWORD Read;
if(ReadFile(hFile, (LPVOID)FileText, FileSize, &Read, NULL))
{
FileText[FileSize] = 0; //Add null terminator
if(SetWindowText(hEdit, FileText))
Success = TRUE;
}
GlobalFree((HGLOBAL)FileText);
}
}
CloseHandle(hFile);
}
return Success;
}
BOOL SaveTextFileFromEdit(HWND hEdit, LPCTSTR FileName)
{
HANDLE hFile;
BOOL Success = FALSE;
hFile = CreateFile(FileName, GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
DWORD TextLength;
TextLength = GetWindowTextLength(hEdit);
// No need to bother if there''s no text.
if(TextLength > 0)
{
LPCTSTR Text;
DWORD BufferSize = TextLength + 1;
(HGLOBAL)Text = GlobalAlloc(GPTR, BufferSize);
if(Text != NULL)
{
if(GetWindowText(hEdit, (LPTSTR)Text, BufferSize))
{
DWORD Written;
if(WriteFile(hFile, Text, TextLength, &Written, NULL))
Success = TRUE;
}
GlobalFree((HGLOBAL)Text);
}
}
CloseHandle(hFile);
}
return Success;
}
#include "resource.h"
IDM_FILE MENU
BEGIN
POPUP "&File"
BEGIN
MENUITEM "&New", ID_FILE_NEW
MENUITEM "&Open", ID_FILE_OPEN
MENUITEM "&Save", ID_FILE_SAVE
MENUITEM "", 0
MENUITEM "E&xit", ID_FILE_EXIT
END
END
#define IDC_MAIN_EDIT 101 #define IDM_FILE 201 #define ID_FILE_EXIT 2011 #define ID_FILE_NEW 2012 #define ID_FILE_OPEN 2013 #define ID_FILE_SAVE 2014