Skip to main content
gamedev.net
🔒 Locked

help

Started by kavalants May 24, 2002 at 1:34 PM 0 replies 200+ views
Original Post
kavalants
kavalants
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:
  
#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;
}
  
resource.rc:
  
#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
  
resource.h:
  
#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
  
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
Kavalants a.k.a. Kamataat
IndirectX
IndirectX
Looks to me that you should be switching by LOWORD of wParam, see WM_COMMAND docs.
---visit #directxdev on afternet <- not just for directx, despite the name

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.