نمایش نتایج 1 تا 5 از 5

نام تاپیک: نمايش متن به كاربر در Win32 با Static

  1. #1
    کاربر دائمی آواتار shahmohammadi
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    کلیبر
    پست
    475

    نمايش متن به كاربر در Win32 با Static

    سلام.
    من با دستورات زير متن رو مي خام نمايش بدم ولي متن كناره هاش رنگي در مي آد و با رنگ صفحه يكي نيست:
               HWND hStatic;
    hStatic=CreateWindowEx(0,"STATIC","Amin",WS_CHILD| WS_VISIBLE|SS_SIMPLE,
    10,10,90,20,hwnd,(HMENU)ABC,GetModuleHandle(NULL), 0);

    تمام استايل هاي SS_* رو كه براي نوع متن هست و تمام استايل هاي ws_* و WS_EX_* رو هم امتحان كردم، ولي مشكل حل نشد.
    ممنون.

  2. #2
    کاربر دائمی آواتار shahmohammadi
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    کلیبر
    پست
    475

    نقل قول: نمايش متن به كاربر در win32 با ُSTATIC

    فكر كنم با كلاس استاتبك نشه.
    اصلا روش ديگري هست كه بدون استفاده از يك كتابخانه و در خود وين32 متن رو آورد؟

  3. #3

    نقل قول: نمايش متن به كاربر در win32 با ُSTATIC

    نقل قول نوشته شده توسط shahmohammadi مشاهده تاپیک
    فكر كنم با كلاس استاتبك نشه. اصلا روش ديگري هست كه بدون استفاده از يك كتابخانه و در خود وين32 متن رو آورد؟
    سلام.
    من متن مورد نظر رو در یک Dialog اضافه کردم و هیچ حاشیه ای ندیدم، براتون امکان داره کد کامل رو اینجا قرار بدید تا بتونم دقیقا متوجه مشکل بشم؟
    در هر حال، روش برای نوشتن Text رو صفحه زیاده، فرضا، میتونید با استفاده از TextOut متن مورد نظر رو در جایگاه خاصی از صفحه (با استفاده از DC ی Window) بنویسید:

    case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    TextOut(hdc, 0, 0, _T("YET ANOTHER TEST"), 16);


    DrawText، TabbedTextOut و ... از دیگر توابع برای نوشتن یک متن روی DC هستش.

    موفق باشید.

  4. #4
    کاربر دائمی آواتار shahmohammadi
    تاریخ عضویت
    فروردین 1390
    محل زندگی
    کلیبر
    پست
    475

    نقل قول: نمايش متن به كاربر در win32 با ُSTATIC

    ممنون.
    تصوير:
    amin.JPG
    در محيط دو سي نوشتم:
    #include <windows.h>
    #define ABC 101

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

    char szClassName[ ] = "WindowsApp";

    int WINAPI WinMain (HINSTANCE hThisInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpszArgument,
    int nFunsterStil)
    {
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND+1;


    if (!RegisterClassEx (&wincl))
    return 0;


    hwnd = CreateWindowEx (0,
    szClassName,
    "Windows App",
    WS_OVERLAPPEDWINDOW,
    CW_USEDEFAULT,
    CW_USEDEFAULT,
    544,
    375,
    HWND_DESKTOP,
    NULL,
    hThisInstance,
    NULL
    );
    ShowWindow (hwnd, nFunsterStil);
    while (GetMessage (&messages, NULL, 0, 0))
    {
    TranslateMessage(&messages);
    DispatchMessage(&messages);
    }
    return messages.wParam;
    }
    LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
    switch (message)
    {
    case WM_CREATE:
    {
    HWND hStatic;
    hStatic=CreateWindowEx(0,"STATIC","Amin",WS_CHILD| WS_VISIBLE|SS_SIMPLE,
    10,10,90,20,hwnd,(HMENU)ABC,GetModuleHandle(NULL), 0);

    }
    break;
    case WM_DESTROY:
    PostQuitMessage (0);
    break;
    default:
    return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
    }

  5. #5

    نقل قول: نمايش متن به كاربر در win32 با ُSTATIC

    سلام.
    حقیقتش متوجه ایراد نمیشم، نوشته شما به رنگ سیاه و روی زمینه طوسی رنگ هستش (که درسته)! اگر دنبال این هستید که Background اون نوشته رو Transparent کنید (در نتیجه، نوشته سیاه رنگی روی همون زمینه سفید داشته باشید)، باید پیام WM_CTLCOLORSTATIC رو نیز Handle کنید و اونجا NULL_BRUSH رو به سیستم برگردونید:

    case WM_CTLCOLORSTATIC:
    return (INT_PTR)(HBRUSH)GetStockObject(NULL_BRUSH);


    بدین ترتیب، کلمه Amin روی پس زمینه Transparent نمایش داده خواهد شد. البته دقت کنید که اگر نیاز دارید با Static Control خاصی اینکارو کنید، باید از روی lParam مطمئن بشید که ID ی اون Static Control همونی هستش که میخواهید، سپس در اون صورت NULL_BRUSH رو به سیستم برگردونید.

    موفق باشید.

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •