I've tested the libCurl code, and I gurantee it works fine.

I updated updater.cpp to look like so.
Code:
#include "updater.h"

//---------------------------------------------------------------------------
HWND hWnd;
HINSTANCE hInst;
LRESULT CALLBACK DlgProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam);
HWND hwndpb;

HANDLE thread_download;
//---------------------------------------------------------------------------
INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
				   LPSTR lpCmdLine, int nCmdShow)
{
	hInst = hInstance;
	
	INITCOMMONCONTROLSEX InitCtrlEx;

	InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
	InitCtrlEx.dwICC  = ICC_PROGRESS_CLASS;
	InitCommonControlsEx(&InitCtrlEx);
    
	DialogBox(hInst, MAKEINTRESOURCE(IDD_CONTROLS_DLG),
	          hWnd, reinterpret_cast<DLGPROC>(DlgProc));

	return FALSE;
}
//---------------------------------------------------------------------------
LRESULT CALLBACK DlgProc(HWND hWndDlg, UINT Msg,
		       WPARAM wParam, LPARAM lParam)
{

	switch(Msg)
	{
	case WM_INITDIALOG:
		hwndpb = CreateWindowEx(0, PROGRESS_CLASS, NULL,
		               WS_CHILD | WS_VISIBLE | PBS_SMOOTH ,
			      20, 20, 260, 17,
			      hWndDlg, (HMENU)IDC_PROGBAR, hInst, NULL);
			      
		return TRUE;

	case WM_COMMAND:
		switch(wParam)
		{
		 case IDUPDATE: 
         {
            
            // Now create thread for progess bar
	
	        thread_download = CreateThread( NULL, 0, CheckForUpdate, 0, 0, NULL);
	        
	        DWORD ExitCode;
	        
	        if(GetExitCodeThread(thread_download, &ExitCode) != 0)
                   ExitThread(ExitCode);
            
			return TRUE;
         }
         break;
		 case IDCANCEL:
         {
            CloseHandle(thread_download);
            DestroyWindow(hwndpb);
			EndDialog(hWndDlg, 0);
			return TRUE;
         }
         break;
		}
	}

	return FALSE;
}
So now I create the thread if the user checks for Updates. If there is no updates available, or the user does not want to update, it kills the thread.

But what about the typecasting pointer problem for the thread function?