c++winapibackgroundwm-paint

What could cause my C++ win32 app to run in the background?


I have been working on this app for at least 3-4 months and just recently it hasn't been working.

It started today, because yesterday it was running fine and smooth. Now it runs, but the window doesn't become visible(I checked the process list in Task Manager and it was running). I have made sure that the ShowWindow(hwnd, nFunsterStil); was not accidentally deleted, but it is still there.

I believe the problem to be something with WM_PAINT because that is what I was working on when the program stopped working.

This is what I had when it compiled and first started being invisible:

    PAINTSTRUCT ps;
    HDC hdc;
    case WM_PAINT: {
                    hdc = BeginPaint(hwnd, &ps); 
                    static RECT Background, Background2;
                    SetRect(&Background, 0, 0, 476, 555);
                    SetRect(&Background2, 300, 300, 200, 400);
                    FillRect(hdc, &Background, (HBRUSH) (INT_PTR)CreateSolidBrush(RGB(50,55,50)));
                    FillRect(hdc, &Background2, (HBRUSH) (INT_PTR)CreateSolidBrush(RGB(100,200,100)));
                    EndPaint(hwnd, &ps); 
                   }

Now I tried getting rid of some of the lines in there, making the whole block into a comment, and even entirely deleting it but it did not help anything. I know I probably messed something up with my computer's memory. So my question is: What is wrong, and How can I fix it? Thanks in advance for any help.

Here is the full Message Switch:

    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
   {
switch (message)                  /* handle the messages */
{ 

       case WM_CTLCOLORSTATIC: {
                               HDC hdcStatic = (HDC) wParam;
                               SetTextColor(hdcStatic, RGB(50,255,50));
                               SetBkColor(hdcStatic, RGB(0,0,0));
                               return (INT_PTR)CreateSolidBrush(RGB(0, 0, 0));
                               }
       case WM_CTLCOLOREDIT: {
                             HDC hdcStatic = (HDC) wParam;
                             SetTextColor(hdcStatic, RGB(50,255,50));
                             SetBkColor(hdcStatic, RGB(0,0,0));
                             return (INT_PTR)CreateSolidBrush(RGB(0, 0, 0));
                             }
    case WM_CREATE:
         {
                   // ------------------MENU-------------------
                   HMENU hMenubar = CreateMenu();
                   HMENU hFile = CreatePopupMenu();
                   HMENU hCPP = CreatePopupMenu();
                   HMENU hHELP = CreatePopupMenu();
                   HMENU hCUSTOMIZE = CreatePopupMenu();

                   HMENU hTHEME = CreatePopupMenu();

                   HMENU hNEW = CreatePopupMenu();

                   AppendMenu(hFile, MF_STRING, ID_HOME, "Ho&me");
                   AppendMenu(hFile, MF_SEPARATOR, 0, 0);

                   AppendMenu(hFile, MF_POPUP, (UINT) hNEW, "N&ew...");
                   AppendMenu(hNEW, MF_STRING, ID_NEW, "Not&e");

                   AppendMenu(hFile, MF_STRING, ID_SAVE, "Sa&ve");
                   AppendMenu(hFile, MF_STRING, ID_SHOWCPP, "Ed&it");
                   AppendMenu(hFile, MF_SEPARATOR, 0, 0);
                   AppendMenu(hFile, MF_STRING, ID_CLOSE, "Cl&ose");

                   AppendMenu(hCPP, MF_STRING, ID_SHOWNOTES, "Li&st all notes");
                   AppendMenu(hCPP, MF_STRING, MENU_COREFILES, "Open 'Notes' fol&der");
                   AppendMenu(hCPP, MF_SEPARATOR, 0, 0);
                   AppendMenu(hCPP, MF_STRING, ID_SAVEFILE, "Sa&ve");
                   AppendMenu(hCPP, MF_STRING, ID_SHOWCPP, "Ed&it");

                   AppendMenu(hHELP, MF_STRING, 0, "Help Fil&es...");
                   AppendMenu(hHELP, MF_STRING, MENU_ABOUT, "Ab&out");
                   AppendMenu(hHELP, MF_SEPARATOR, 0, 0);
                   AppendMenu(hHELP, MF_STRING, 0, "Pro&duct Website");

                   AppendMenu(hCUSTOMIZE, MF_POPUP, (UINT) hTHEME, "Current& Theme");
                   AppendMenu(hTHEME, MF_STRING | MF_CHECKED, 0, "Pr&ompt");
                   AppendMenu(hTHEME, MF_STRING, 0, "No&te Pad");

                   AppendMenu(hMenubar, MF_STRING | MF_POPUP, (UINT) hFile, "Fi&le");
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_STRING | MF_POPUP, (UINT) hCPP, "No&tes");
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_STRING | MF_POPUP, (UINT) hHELP, "He&lp");
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_SEPARATOR, 0, 0);
                   AppendMenu(hMenubar, MF_STRING | MF_POPUP, (UINT) hCUSTOMIZE, "Custom&ise");


                   SetMenu(hwnd, hMenubar);

                   // WINDOW FEATURES!!!

                   TEST[1] = CreateWindow(TEXT("BUTTON"), TEXT("List all notes!"),
                   WS_VISIBLE | WS_CHILD | WS_BORDER,
                   200,375,150,25,
                   hwnd,(HMENU) ID_SHOWNOTES, NULL, NULL);

                   MAIN = CreateWindow(TEXT("edit"), TEXT(""),                       
                   WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_READONLY | SBS_RIGHTALIGN | WS_VSCROLL,
                   10,20,516,350,
                   hwnd,(HMENU) 5001, NULL, NULL);

                   EDIT = CreateWindow(TEXT("edit"), TEXT(""),                       
                   WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT | ES_MULTILINE | SBS_RIGHTALIGN | WS_VSCROLL,
                   10,20,516,350,
                   hwnd,(HMENU) 5001, NULL, NULL);
                   ShowWindow(EDIT, SW_HIDE);

                   NAME=CreateWindow(TEXT("edit"), TEXT("-> Title <-"),
                   WS_VISIBLE | WS_CHILD | WS_BORDER | ES_AUTOHSCROLL,
                   10, 0, 516, 20,
                   hwnd, (HMENU) ID_FILENAME, NULL, NULL);
                   ShowWindow(NAME, SW_HIDE);


                   TEST[2] = CreateWindow(TEXT("BUTTON"), TEXT("-> Home <-"),
                   WS_VISIBLE | WS_CHILD | WS_BORDER,
                   200,375,150,25,
                   hwnd,(HMENU) ID_SHOWHOME, NULL, NULL);
                   ShowWindow(TEST[2], SW_HIDE);
                   SetWindowText(MAIN, DEFTEXT);
         break;
         }
    case WM_COMMAND: {
         // MENU ITEMS!!!
                   //Close
              if( LOWORD(wParam) == ID_CLOSE ) {
                  PostQuitMessage (0);  
                  }
              if(LOWORD(wParam) == MENU_COREFILES) {
                                ShellExecute(NULL, "explore", "Notes", NULL, NULL, SW_SHOW);
                                }
              if(LOWORD(wParam) == MENU_ABOUT) {
                                MessageBox(hwnd, "© 2012 Joseph Meadows. \r\nThis program is essentially a reference guide for whatever you want. It can be used to store school notes, or things completely opposite.", "About:",
                                MB_ICONINFORMATION | MB_SYSTEMMODAL | MB_OK);
                                }
              if(LOWORD(wParam) == ID_SHOWCPP) {
                                if(home==3) {
                                            MessageBox(hwnd, "Error: 9026. Cannot edit Home Page.",  "Invalid Action!", 
                                            MB_ICONERROR | MB_SYSTEMMODAL | MB_DEFBUTTON1 | MB_OK);
                                            }
                                 else if(home==1) {
                                                 MessageBox(hwnd, "Error: 6502 Cannot edit System pages.",  "Invalid Action!", 
                                                 MB_ICONERROR | MB_SYSTEMMODAL | MB_DEFBUTTON1 | MB_OK);
                                                 }
                                else {
                                     ShowWindow(EDIT, SW_SHOW);
                                     ShowWindow(NAME, SW_SHOW);
                                     ShowWindow(MAIN, SW_HIDE);
                                     SetWindowText(StatButts[0],"List all notes!");
                                     mode=2;
                                     }
                                     }
              if(LOWORD(wParam) == ID_SAVE) {
                                char* tittle=SaveFile(hwnd, NAME, EDIT);
                                SetWindowText(MAIN, tittle);
                                ShowWindow(EDIT, SW_HIDE);
                                ShowWindow(NAME, SW_HIDE);
                                ShowWindow(MAIN, SW_SHOW);
                                mode=1;
                                }
              if(LOWORD(wParam) == ID_HOME) {
                                if(mode==2){
                                            int Savebox=MessageBox(hwnd, "Would you like to save this page?",  "Save Page", 
                                            MB_ICONQUESTION | MB_SYSTEMMODAL | MB_DEFBUTTON1 | MB_YESNOCANCEL);
                                            switch(Savebox){
                                                            case IDYES: {
                                                                 ShowWindow(EDIT, SW_HIDE);
                                                                 ShowWindow(NAME, SW_HIDE);
                                                                 ShowWindow(MAIN, SW_SHOW);
                                                                 SetWindowText(StatButts[0],"List all notes!");
                                                                 int len = GetWindowTextLength(EDIT)+1;
                                                                 static char title[1000];
                                                                 GetWindowText(EDIT, title, len);
                                                                 SetWindowText(MAIN, title);
                                                                 mode=1;
                                                                 home=1;
                                                                 break;
                                                                 }
                                                            case IDNO: {
                                                                 ShowWindow(EDIT, SW_HIDE);
                                                                 ShowWindow(NAME, SW_HIDE);
                                                                 ShowWindow(MAIN, SW_SHOW);
                                                                 SetWindowText(StatButts[0],"List all notes!");
                                                                 SetWindowText(MAIN, DEFTEXT);
                                                                 mode=1;
                                                                 home=1;
                                                                 }
                                                            case IDCANCEL: {}
                                            }
                                }     
                                if(mode==1){        
                                            ShowWindow(EDIT, SW_HIDE);
                                            ShowWindow(NAME, SW_HIDE);
                                            ShowWindow(MAIN, SW_SHOW);
                                            SetWindowText(MAIN, DEFTEXT);
                                            SetWindowText(StatButts[0],"List all notes!");
                                }
              }
              if(LOWORD(wParam)==ID_NEW) {
                               if(mode==1) {
                                           ShowWindow(EDIT, SW_SHOW);
                                           ShowWindow(NAME, SW_SHOW); 
                                           ShowWindow(MAIN, SW_HIDE);
                                           SetWindowText(TEST[1],"List all notes!");
                                           SetWindowText(EDIT, "");
                                           mode=2;
                               }
              }
              if(LOWORD(wParam)==ID_SHOWHOME) {      
                                                     if(mode==1) {
                                                                 ShowWindow(MAIN, SW_SHOW);
                                                                 ShowWindow(NAME, SW_HIDE);
                                                                 ShowWindow(EDIT, SW_HIDE);
                                                                 ShowWindow(TEST[1], SW_SHOW);
                                                                 ShowWindow(TEST[2], SW_HIDE);
                                                                 home=1;
                                                                 SetWindowText(MAIN, DEFTEXT);
                                                                 SetWindowText(TEST[1], "List all notes!");
                                                                 }
                                                     if(mode!=1) {                  
                                                                 int Savebox=MessageBox(hwnd, "Would you like to save this page?",  "Save Page?", 
                                                                 MB_ICONQUESTION | MB_SYSTEMMODAL | MB_DEFBUTTON1 | MB_YESNOCANCEL);
                                                                 switch(Savebox){
                                                                                 case IDYES: {
                                                                                      ShowWindow(EDIT, SW_HIDE);
                                                                                      ShowWindow(NAME, SW_HIDE);
                                                                                      ShowWindow(MAIN, SW_SHOW);
                                                                                      ShowWindow(TEST[1], SW_SHOW);
                                                                                      ShowWindow(TEST[2], SW_HIDE);
                                                                                      SetWindowText(TEST[1],"List all notes!");
                                                                                      int len = GetWindowTextLength(EDIT)+1;
                                                                                      static char title[1000];
                                                                                      GetWindowText(EDIT, title, len);
                                                                                      SetWindowText(MAIN, title);
                                                                                      mode=1;
                                                                                      home=1;
                                                                                      break;
                                                                                      }
                                                                                 case IDNO: {
                                                                                      ShowWindow(EDIT, SW_HIDE);
                                                                                      ShowWindow(NAME, SW_HIDE);
                                                                                      ShowWindow(MAIN, SW_SHOW);
                                                                                      ShowWindow(TEST[1], SW_SHOW);
                                                                                      ShowWindow(TEST[2], SW_HIDE);
                                                                                      SetWindowText(TEST[1],"List all notes!");
                                                                                      mode=1;
                                                                                      home=1;
                                                                                      }

                                                                 }
                                                     }
                                               }
              if(LOWORD(wParam)==ID_SHOWNOTES) {
                                              if(mode==1) {
                                                                             std::string umm="";
                                                                             ShowWindow(NAME,SW_SHOW);
                                                                             ShowWindow(MAIN,SW_SHOW);
                                                                             ShowWindow(EDIT,SW_HIDE);
                                                                             ShowWindow(TEST[1], SW_HIDE);
                                                                             ShowWindow(TEST[2], SW_SHOW);
                                                                             SetWindowText(NAME, "-> Title <-");
                                                                             WIN32_FIND_DATA File_Buffer;
                                                                             HANDLE hFind = FindFirstFile(TEXT("Notes/*.NNF"), &File_Buffer);
                                                                             PTSTR Files[8999];
                                                                             int num=0;
                                                                             SetWindowText(MAIN, "");
                                                                             if(hFind != INVALID_HANDLE_VALUE) {
                                                                                      do {
                                                                                         PTSTR FileName = File_Buffer.cFileName;

                                                                                         Files[num] = FileName;
                                                                                         num=num+1;

                                                                                         string kkk(FileName);
                                                                                         stringstream nam(kkk);
                                                                                         string name;
                                                                                         getline(nam, name, '.');
                                                                                         umm = Stringadd(umm, name);
                                                                                         //================================================================================================
                                                                                         } while (FindNextFile(hFind, &File_Buffer));
                                                                             std::stringstream out;
                                                                             out << num;
                                                                             std::string numb=out.str();
                                                                             umm=umm+" \r\n \r\n "+"Number of Notes: "+numb;
                                                                             const char * lol=umm.c_str();
                                                                             SetWindowText(MAIN, lol);
                                                                             FindClose(hFind);
                                                             }
                                                             } 
                                                             if(mode!=1) {                  
                                                                 int Savebox=MessageBox(hwnd, "Would you like to save this page?",  "Save Page", 
                                                                 MB_ICONQUESTION | MB_SYSTEMMODAL | MB_DEFBUTTON1 | MB_YESNOCANCEL);
                                                                 switch(Savebox){
                                                                                 case IDYES: {
                                                                                      ShowWindow(EDIT, SW_HIDE);
                                                                                      ShowWindow(NAME, SW_HIDE);
                                                                                      ShowWindow(MAIN, SW_SHOW);
                                                                                      ShowWindow(TEST[1], SW_SHOW);
                                                                                      ShowWindow(TEST[2], SW_HIDE);
                                                                                      SetWindowText(TEST[1],"List all notes!");
                                                                                      int len = GetWindowTextLength(EDIT)+1;
                                                                                      static char title[1000];
                                                                                      GetWindowText(EDIT, title, len);
                                                                                      SetWindowText(MAIN, title);
                                                                                      mode=1;
                                                                                      home=1;
                                                                                      break;
                                                                                      }
                                                                                 case IDNO: {
                                                                                      ShowWindow(EDIT, SW_HIDE);
                                                                                      ShowWindow(NAME, SW_HIDE);
                                                                                      ShowWindow(MAIN, SW_SHOW);
                                                                                      ShowWindow(TEST[1], SW_SHOW);
                                                                                      ShowWindow(TEST[2], SW_HIDE);
                                                                                      SetWindowText(TEST[1],"List all notes!");
                                                                                      mode=1;
                                                                                      home=1;
                                                                                      }

                                                                 }
                                                     }
                                              }                          
         // BUTTONS!!!
                      //Show CPP
         break;
         }
         case WM_PAINT: {
                          PAINTSTRUCT ps;
                          HDC hdc;
                        hdc = BeginPaint(hwnd, &ps); 
                        static RECT Background;
                        SetRect(&Background, 0, 0, 476, 555);
                        FillRect(hdc, &Background, (HBRUSH) (INT_PTR)CreateSolidBrush(RGB(50,55,50)));
                        EndPaint(hwnd, &ps); 
                        break;
                        }
    case WM_DESTROY:
        PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
    default:                      /* for messages that we don't deal with */
        break;
        return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
   }

And here is the parts relevant to making the window:

    LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

    /*  Make the class name into a global variable  */
    char szClassName[ ] = "WindowsApp";

    int WINAPI WinMain (HINSTANCE hThisInstance,
                HINSTANCE hPrevInstance,
                LPSTR lpszArgument,
                int nFunsterStil)

    {
    HWND hwnd, hwnd2;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL;                 /* No menu */
wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
wincl.cbWndExtra = 0;                      /* structure or the window instance */
/* Use Windows's default color as the background of the window */
wincl.hbrBackground = (HBRUSH) (INT_PTR)CreateSolidBrush(RGB(0,0,0));

/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
    return 0;



/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
       0,                   /* Extended possibilites for variation */
       szClassName,         /* Classname */
       "VirtualNotes",       /* Title Text */
       WS_SYSMENU | WS_MINIMIZEBOX, /* default window */
       CW_USEDEFAULT,       /* Windows decides the position */
       CW_USEDEFAULT,       /* where the window ends up on the screen */
       554,                 /* The programs width */
       475,                 /* and height in pixels */
       HWND_DESKTOP,        /* The window is a child-window to desktop */
       NULL,                /* No menu */
       hThisInstance,       /* Program Instance handler */
       NULL                 /* No Window Creation data */
       );
/* Make the window visible on the screen */
ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
    /* Translate virtual-key messages into character messages */
    TranslateMessage(&messages);
    /* Send message to WindowProcedure */
    DispatchMessage(&messages);
}

/* The program return-

Solution

  • You should perform an investigation to identify the problem. Then - ask for the solution.

    In case you're creating a standard "overlapped" window (i.e. with title bar, system menu and min/max/close buttons) - all of the above should be drawn by the system, only the client area (i.e. the internals of the window) is drawn within WM_PAINT handling. So that if you see nothing on the screen - the problem is probably elsewhere.

    There's a nice tool within the MSVC, called Spy++. Using it find your process/thread, check if it *really created the window, check your window style and placement.

    You may also add a breakpoint within your WM_PAINT processing. You'll get there iff your window indeed exists and visible.

    Some notes regarding your code:

    1. No error checking (such as testing retval of BeginPaint). How do you know your window is indeed created (or at least its class is registered)? At least some debug-time macro (such as ASSERT) would be helpful.
    2. If there a reason Why are you using static RECT? (in some very specific cases this may save some stack memory).
    3. CreateSolidBrush returns you a brush handle, which you must free by DeleteObject. You have a resource leak actually.