Avatar billede code_freak Nybegynder
15. oktober 2003 - 12:34 Der er 28 kommentarer og
1 løsning

et standart WinAPI window med dynamisk text

Jeg sidder og forsøger at lave mine først WinAPI windows, det går også fint nok nu, men kan ikke finde nogen tutorial der fortæller mig hvordan jeg kan ændre texten i mit window (strings).

For eksempel har jeg levet et Client program til min server, den skulle gerne sige

string1 Forbinder
string2 Logger på
string3 Logget ind

altså de skal erstatte hinanden i række følge efter hvad trin den er ved
Avatar billede soreno Praktikant
15. oktober 2003 - 12:47 #1
SendMessage(hwnd_til_label, WM_SETTEXT, NULL, "Forbinder");
Avatar billede soreno Praktikant
15. oktober 2003 - 12:48 #2
SendMessage(hwnd_til_label, WM_SETTEXT, NULL, "Forbinder");
Sleep(1000);
SendMessage(hwnd_til_label, WM_SETTEXT, NULL, "Logger på");
Sleep(1000);
SendMessage(hwnd_til_label, WM_SETTEXT, NULL, "Logget ind");
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:27 #3
hmmm.... hved ikke lige hvordan man sætte det ind... jeg bruger en .rc fil til mine STATIC string :\
Avatar billede soreno Praktikant
15. oktober 2003 - 13:27 #4
Post din kode.
Avatar billede soreno Praktikant
15. oktober 2003 - 13:29 #5
(bare c++ filen)
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:32 #6
nede i min Winmain?
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:33 #7
sådan står det nu... men virker ikke:

#include <windows.h>

#include "resource.h"

HBRUSH g_hbrBackground = NULL;

BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch(Message)
    {
        case WM_INITDIALOG:
            g_hbrBackground = CreateSolidBrush(RGB(236, 233, 216));

            SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL,
                MAKEINTRESOURCE(IDI_APPLICATION)));
            SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL,
                MAKEINTRESOURCE(IDI_APPLICATION)));
        break;
        case WM_CLOSE:
            EndDialog(hwnd, 0);
        break;
        case WM_CTLCOLORDLG:   
            return (LONG)g_hbrBackground;
        case WM_CTLCOLORSTATIC:
        {
            HDC hdcStatic = (HDC)wParam;
            SetTextColor(hdcStatic, RGB(0, 0, 0));
            SetBkMode(hdcStatic, TRANSPARENT);
            return (LONG)g_hbrBackground;
        }
        break;
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case IDOK:
                    EndDialog(hwnd, 0);
                break;
            }
        break;
        case WM_DESTROY:
            DeleteObject(g_hbrBackground);
        break;
        default:
            return FALSE;
    }
    return TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
    SendMessage(hInstance, WM_SETTEXT, NULL, "Forbinder");
    Sleep(1000);
    SendMessage(hInstance, WM_SETTEXT, NULL, "Logger på");
    Sleep(1000);
    SendMessage(hInstance, WM_SETTEXT, NULL, "Logget ind");
}
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:36 #8
jeg er ret dum til WinAPI så jeg er sikkert dum er høre på :\
Avatar billede soreno Praktikant
15. oktober 2003 - 13:39 #9
case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case IDOK:
                    SendDlgItemMessage(hwnd, ID_PAA_LABEL,WM_SETTEXT, NULL, "Forbinder");
                    Sleep(1000);
                    SendDlgItemMessage(hwnd, ID_PAA_LABEL,WM_SETTEXT, NULL, "Logger på");
                    Sleep(1000);
                    SendDlgItemMessage(hwnd, ID_PAA_LABEL,WM_SETTEXT, NULL, "Logget ind");
                    Sleep(1000);
                    EndDialog(hwnd, 0);
                break;
            }
        break;


Udskift ID_PAA_LABEL med den ID du har givet din label.
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:45 #10
--------------------Configuration: dlg_three - Win32 Debug--------------------
Compiling...
dlg_three.c
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : error C2065: 'IDC_STATIC' : undeclared identifier
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4047: 'function' : 'unsigned int ' differs in levels of indirection from 'void *'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 4
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4047: 'function' : 'long ' differs in levels of indirection from 'char [10]'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 5
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(38) : warning C4047: 'function' : 'unsigned int ' differs in levels of indirection from 'void *'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(38) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 4
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(38) : warning C4047: 'function' : 'long ' differs in levels of indirection from 'char [10]'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(38) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 5
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(40) : warning C4047: 'function' : 'unsigned int ' differs in levels of indirection from 'void *'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(40) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 4
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(40) : warning C4047: 'function' : 'long ' differs in levels of indirection from 'char [11]'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(40) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 5
Error executing cl.exe.

dlg_three.exe - 1 error(s), 12 warning(s)
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:47 #11
måske vis jeg sender min rc fil.

//Microsoft Developer Studio generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#ifndef __BORLANDC__
#include "winres.h"
#endif

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// English (Canada) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN
#pragma code_page(1252)
#endif //_WIN32

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE DISCARDABLE
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE DISCARDABLE
BEGIN
    "#ifndef __BORLANDC__\r\n"
    "#include ""winres.h""\r\n"
    "#endif\r\n"
    "\0"
END

3 TEXTINCLUDE DISCARDABLE
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//

IDD_MAIN DIALOGEX 0, 0, 204, 51
STYLE DS_MODALFRAME | DS_3DLOOK | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION |
    WS_SYSMENU
CAPTION "Connecting"
FONT 8, "MS Sans Serif"
BEGIN
    LTEXT          "Log på for at se status",
                    IDC_STATIC,13,15,179,26,0,WS_EX_TRANSPARENT
    GROUPBOX        "Status",IDC_STATIC,7,7,191,37
END


/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//

#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
    IDD_MAIN, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 198
        TOPMARGIN, 7
        BOTTOMMARGIN, 44
        HORZGUIDE, 15
        HORZGUIDE, 41
    END
END
#endif    // APSTUDIO_INVOKED

#endif    // English (Canada) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED
Avatar billede soreno Praktikant
15. oktober 2003 - 13:48 #12
Hvad står der i din resource fil ?
(.res eller .rc)
Avatar billede soreno Praktikant
15. oktober 2003 - 13:49 #13
Ret:
LTEXT          "Log på for at se status",
                    IDC_STATIC,13,15,179,26,0,WS_EX_TRANSPARENT

til:
LTEXT          "Log på for at se status",
                    ID_LABEL_STATUS,13,15,179,26,0,WS_EX_TRANSPARENT


og ret til:
SendDlgItemMessage(hwnd, ID_LABEL_STATUS, NULL, "Logget ind");
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:54 #14
hvordan registrere jeg dens navn :\

--------------------Configuration: dlg_three - Win32 Debug--------------------
Compiling resources...
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.rc (66): error RC2104 : undefined keyword or key name: ID_LABEL_STATUS
Error executing rc.exe.

dlg_three.exe - 1 error(s), 0 warning(s)
Avatar billede soreno Praktikant
15. oktober 2003 - 13:56 #15
Nå ja, du skal give den en værdi i:
resource.h

F.eks.
#define ID_LABEL_STATUS 200
Avatar billede code_freak Nybegynder
15. oktober 2003 - 13:58 #16
--------------------Configuration: dlg_three - Win32 Debug--------------------
Compiling resources...
Compiling...
dlg_three.c
c:\documents and settings\freegeg.freegeg\skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4047: 'function' : 'unsigned int ' differs in levels of indirection from 'void *'
c:\documents and settings\freegeg.freegeg\skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 3
c:\documents and settings\freegeg.freegeg\skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4047: 'function' : 'unsigned int ' differs in levels of indirection from 'char [11]'
c:\documents and settings\freegeg.freegeg\skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 4
c:\documents and settings\freegeg.freegeg\skrivebord\source\source\dlg_three\dlg_three.c(36) : error C2198: 'SendDlgItemMessageA' : too few actual parameters
Error executing cl.exe.

dlg_three.exe - 1 error(s), 4 warning(s)
Avatar billede soreno Praktikant
15. oktober 2003 - 14:00 #17
Der skal stå:
SendDlgItemMessage(hwnd, ID_LABEL_STATUS, WM_SETTEXT, NULL, "Logget ind");

(Jeg skrev forkert 13:49:29)
Avatar billede soreno Praktikant
15. oktober 2003 - 14:00 #18
Hvad står der i linie 36 ?
Avatar billede code_freak Nybegynder
15. oktober 2003 - 14:07 #19
SendDlgItemMessage(hwnd, ID_LABEL_STATUS, WM_SETTEXT, NULL, "Loggerind");

den giver fejlen:

--------------------Configuration: dlg_three - Win32 Debug--------------------
Compiling...
dlg_three.c
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4047: 'function' : 'unsigned int ' differs in levels of indirection from 'void *'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 4
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4047: 'function' : 'long ' differs in levels of indirection from 'char [10]'
C:\Documents and Settings\FreeGeG.FREEGEG\Skrivebord\source\source\dlg_three\dlg_three.c(36) : warning C4024: 'SendDlgItemMessageA' : different types for formal and actual parameter 5
Linking...

dlg_three.exe - 0 error(s), 4 warning(s)
Avatar billede soreno Praktikant
15. oktober 2003 - 14:13 #20
Prøv lige at poste hele koden igen (og marker linie 36).
Avatar billede code_freak Nybegynder
15. oktober 2003 - 14:15 #21
#include <windows.h>
#include "resource.h"


HBRUSH g_hbrBackground = NULL;

BOOL CALLBACK DlgProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
    switch(Message)
    {
        case WM_INITDIALOG:
            g_hbrBackground = CreateSolidBrush(RGB(236, 233, 216));

            SendMessage(hwnd, WM_SETICON, ICON_SMALL, (LPARAM)LoadIcon(NULL,
                MAKEINTRESOURCE(IDI_APPLICATION)));
            SendMessage(hwnd, WM_SETICON, ICON_BIG, (LPARAM)LoadIcon(NULL,
                MAKEINTRESOURCE(IDI_APPLICATION)));
        break;
        case WM_CLOSE:
            EndDialog(hwnd, 0);
        break;
        case WM_CTLCOLORDLG:   
            return (LONG)g_hbrBackground;
        case WM_CTLCOLORSTATIC:
        {
            HDC hdcStatic = (HDC)wParam;
            SetTextColor(hdcStatic, RGB(0, 0, 0));
            SetBkMode(hdcStatic, TRANSPARENT);
            return (LONG)g_hbrBackground;
        }
        break;
        case WM_COMMAND:
            switch(LOWORD(wParam))
            {
                case IDOK:
                    SendDlgItemMessage(hwnd, ID_LABEL_STATUS, WM_SETTEXT, NULL, "Logger ind"); //linie 36
                break;
            }
        break;
        case WM_DESTROY:
            DeleteObject(g_hbrBackground);
        break;
        default:
            return FALSE;
    }
    return TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
}
Avatar billede soreno Praktikant
15. oktober 2003 - 14:20 #22
Hmmm.

Så prøv:
SendDlgItemMessage(hwnd, ID_LABEL_STATUS, WM_SETTEXT, 0, (LPARAM)(LPCTSTR)"Logger ind");
Avatar billede code_freak Nybegynder
15. oktober 2003 - 14:27 #23
nu virker det, men sleep() functionen virker ikke, ked af at sige det efter det arbejde du har gjord :(
Avatar billede code_freak Nybegynder
15. oktober 2003 - 14:28 #24
nu skal jeg dog have indsat min Netcode, men kunne godt bruge en resave timeout.. for at stoppe vis man gør et eller andet som min kode ikke kan forstå
Avatar billede soreno Praktikant
15. oktober 2003 - 14:31 #25
Det du skriver 14:28:40 forstår jeg ikke ?

Hvad mener du med "resave timeout" ?
Avatar billede code_freak Nybegynder
15. oktober 2003 - 14:33 #26
vis Netcode timeout ikke kan stoppe, kan man vel sette en sleep, som der vil stoppe forsøget på at forbinde, når den starter
Avatar billede code_freak Nybegynder
15. oktober 2003 - 14:36 #27
men vilken headerfil ligger sleep i?
Avatar billede soreno Praktikant
15. oktober 2003 - 14:38 #28
Den ligger i <windows.h>

Det er med stort !

Sleep(1000);
Avatar billede code_freak Nybegynder
15. oktober 2003 - 14:40 #29
nåå, okay mange tak du har været til stor hjælp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester