Creacion de controles Personalizados? (ASM 32 Bits)

Iniciado por Riki_89D, 25 Diciembre 2009, 19:55 PM

0 Miembros y 1 Visitante están viendo este tema.

Riki_89D

Es posible crear por ejemplo un boton distino a los estandares dw Windows,por ejemplo un boton de forma triangular?? oseacrear un control personalizado,programo con Ensamblador de 32 bits (utilizo las API de windows) como puedo crear mis propios controles?


:S

salu2

Eternal Idol

#1
Si, owner drawn, de la MSDN (no lo encuentre on-line  :():

Using Owner Drawn Buttons
The parent window of an owner-drawn button typically responds to at least three messages for the button:

WM_INITDIALOG
WM_COMMAND
WM_DRAWITEM
When you must paint an owner-drawn button, the system sends the parent window a WM_DRAWITEM message whose lParam parameter is a pointer to a DRAWITEMSTRUCT structure. Use this structure with all owner-drawn controls to provide the application with the information it requires to paint the control. The itemAction and itemState members of the DRAWITEMSTRUCT structure define how to paint an owner-drawn button.

The following example shows how to process WM_INITDIALOG, WM_DRAWITEM, and WM_COMMAND messages for owner-drawn buttons. This example demonstrates how to draw one of two bitmaps for a control, depending on whether the control is selected. You would typically use the wParam parameter of the WM_DRAWITEM message to identify the control; in this example, only one control is assumed.

BOOL CALLBACK OwnDrawProc(HWND hDlg, UINT message, WPARAM wParam,
                          LPARAM lParam)
{
    HDC hdcMem;
    LPDRAWITEMSTRUCT lpdis;

    switch (message)
    {
        case WM_INITDIALOG:

            // hinst, hbm1 and hbm2 are defined globally.
            hbm1 = LoadBitmap((HANDLE) hinst, "OwnBit1");
            hbm2 = LoadBitmap((HANDLE) hinst, "OwnBit2");
            return TRUE;

        case WM_DRAWITEM:
            lpdis = (LPDRAWITEMSTRUCT) lParam;
            hdcMem = CreateCompatibleDC(lpdis->hDC);

            if (lpdis->itemState & ODS_SELECTED)  // if selected
                SelectObject(hdcMem, hbm2);
            else
                SelectObject(hdcMem, hbm1);

            // Destination
            StretchBlt(
                lpdis->hDC,         // destination DC
                lpdis->rcItem.left, // x upper left
                lpdis->rcItem.top,  // y upper left

                // The next two lines specify the width and
                // height.
                lpdis->rcItem.right - lpdis->rcItem.left,
                lpdis->rcItem.bottom - lpdis->rcItem.top,
                hdcMem,    // source device context
                0, 0,      // x and y upper left
                32,        // source bitmap width
                32,        // source bitmap height
                SRCCOPY);  // raster operation

            DeleteDC(hdcMem);
            return TRUE;

        case WM_COMMAND:
            if (wParam == IDOK
                || wParam == IDCANCEL)
            {
                EndDialog(hDlg, TRUE);
                return TRUE;
            }
            if (HIWORD(wParam) == BN_CLICKED)
            {
                switch (LOWORD(wParam))
                {
                    case IDC_OWNERDRAW:

                        // application-defined processing

                        break;
                }
            }
            break;

        case WM_DESTROY:
            DeleteObject(hbm1);  // delete bitmaps
            DeleteObject(hbm2);

            break;

    }
    return FALSE;
        UNREFERENCED_PARAMETER(lParam);
}
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Debci

eso es asm? parece C++ xD
O quizas parece mi in-experiencia.

Saludos

Eternal Idol

Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en 27 Diciembre 2009, 21:02 PM
eso es asm? parece C++ xD
O quizas parece mi in-experiencia.

Es C ... ya podrias haber puesto algun ejemplo del tema en assembly  :rolleyes:
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Debci

Cita de: Eternal Idol en 27 Diciembre 2009, 21:57 PM
Cita de: ,.-~*´¨¯¨`*·~-.¸..::| D3Bć1 |::.,.-~*´¨¯¨`*·~-.¸ en 27 Diciembre 2009, 21:02 PM
eso es asm? parece C++ xD
O quizas parece mi in-experiencia.

Es C ... ya podrias haber puesto algun ejemplo del tema en assembly  :rolleyes:
No pillo la ironia pero weno xDDD

Saludos