silent
silent

Reputation: 2924

WinApi control doesn't show on the main window

hello I have the following win32 program, and I have an EDITTEXT control that doesn't show up on the screen. There is meant to be two EDITTEXT controls drawn on the main window, but only one shows, why is this?

full code

#include <windows.h>
#include <iostream>
#include "resource.h"
using namespace std;
const int BUFFERMAX = 512;
char server_ip[BUFFERMAX];
int port;


const char windclassname[] = "windowClass";

LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
INT_PTR CALLBACK AboutDialog(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
INT_PTR CALLBACK ConnectWin(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    WNDCLASSEX parent_window;
    HWND hwnd;
    MSG msg;

    parent_window.cbSize = sizeof(WNDCLASSEX);
    parent_window.style = 0;
    parent_window.lpfnWndProc = WndProc;
    parent_window.cbClsExtra = 0;
    parent_window.cbWndExtra = 0;
    parent_window.hInstance = hInstance;
    parent_window.hIcon = LoadIcon(NULL,IDI_APPLICATION);
    parent_window.hCursor = LoadCursor(NULL,IDC_ARROW);
    parent_window.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    parent_window.lpszMenuName = MAKEINTRESOURCE(ID_MENU);
    parent_window.lpszClassName = windclassname;
    parent_window.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

    //Registering the Class for use.
    if ( !RegisterClassEx(&parent_window)){
        MessageBox(NULL,"Could not Register WindowClass","Error",MB_OK);
        return 0;
    }

    //Creating the window
    hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,windclassname,"UI test",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,250,350,NULL,NULL,hInstance,NULL);
    if ( hwnd == NULL ){
        MessageBox(NULL,"Could not create window","Error",MB_OK);
        return 0;
    }

    ShowWindow(hwnd,nCmdShow);
    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:

            HWND chatbox_cntrl;
            HWND message_text;

            chatbox_cntrl = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
                WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
                0,0,240,260,hwnd,(HMENU)CHATBOX,GetModuleHandle(NULL),NULL);

            message_text = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
                WS_CHILD,0,270,240,10,hwnd,(HMENU)MESSAGETEXT,GetModuleHandle(NULL),NULL);

        break;
        case WM_COMMAND:
            switch(LOWORD(wParam)){
                case ID_MABOUT_INFO:
                    DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MABOUT_INFO), hwnd,AboutDialog);
                break;

                case ID_MCONTROLS_CONNECT:
                    int ret = DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(ID_MCONTROLS_CONNECT), hwnd,ConnectWin);
                break;
                case ID_MCONTROLS_EXIT:
                    DestroyWindow(hwnd);
                break;
            }
        break;
        case WM_CLOSE:
            DestroyWindow(hwnd);
        break;
        case WM_DESTROY:
            PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hwnd,msg,wParam,lParam);

}

INT_PTR CALLBACK AboutDialog(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
    switch (msg){
        case WM_CLOSE:
            EndDialog(hwnd,WM_CLOSE);
        break;
        default:
            return false;
    }
    return true;

}

INT_PTR CALLBACK ConnectWin(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam){
    switch(msg){
        case WM_COMMAND:
            switch(wParam){
                case CONNECT_BUTTON:
                    int len = GetWindowTextLength(GetDlgItem(hwnd,EDITTEXT_CONNECT));
                    int recv = GetDlgItemText(hwnd,EDITTEXT_CONNECT,server_ip,len+1);
                    port = GetDlgItemInt(hwnd,EDITTEXT_PORT,NULL,false);
                    EndDialog(hwnd,CONNECT_BUTTON);
                break;
            }
        break;
        case WM_CLOSE:
            EndDialog(hwnd,WM_CLOSE);
        break;
        default:
            return false;
    }
    return true;
}

these are the two controls.

case WM_CREATE:

            HWND chatbox_cntrl;
            HWND message_text;

            chatbox_cntrl = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
                WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,
                0,0,240,260,hwnd,(HMENU)CHATBOX,GetModuleHandle(NULL),NULL);

            message_text = CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",
                WS_CHILD,0,270,240,10,hwnd,(HMENU)MESSAGETEXT,GetModuleHandle(NULL),NULL);

        break;

Upvotes: 1

Views: 612

Answers (3)

RizonBarns
RizonBarns

Reputation: 621

Have you initialize the controls before load it with InitCommonControlsEx? Try this code one.

int InitControls() {
    INITCOMMONCONTROLSEX iccx;

    iccx.dwSize = sizeof(INITCOMMONCONTROLSEX);
    iccx.dwICC = ICC_WIN95_CLASSES;

    InitCommonControlsEx(&iccx);
}

Remember to include header commctrl.h and library comctl32.dll

Good luck!

Upvotes: 0

John Dibling
John Dibling

Reputation: 101494

The message text window doesn't have the same style flags as the first. Specifically, it is missing WS_VISIBLE. This could well be your problem.

Upvotes: 5

In silico
In silico

Reputation: 52197

Did you call InitCommonControlsEx() before creating your edit windows? Does CreateWindow() return a valid HWND?

INITCOMMONCONTROLSEX icc;
icc.dwSize = sizeof(icc);
// Load one of the intrinsic User32 control classes.
// The user controls include button, edit, static,
// listbox, combobox, and scrollbar. 
dwICC = ICC_STANDARD_CLASSES;
::InitCommonControlsEx(&icc);

Upvotes: 0

Related Questions