jkl666 发表于 2014-7-15 11:18:48

如何将窗口的非客户区做成圆形,而不是在里面添加。

求助:问题如上,为了多学一点,请帮忙,给出要查的知识点或书籍都可。

       是不是还要找VGA与汇编知识吗。

c2013 发表于 2014-7-15 13:35:21

不会实现,用duilib试试。

仰望天上的光 发表于 2014-7-15 17:40:53

#include <windows.h>
#include <stdio.h>

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                  PSTR szCmdLine, int iCmdShow)
{
        static TCHAR szAppName[] = TEXT ("HelloWin") ;
        HWND         hwnd ;
        MSG          msg ;
        WNDCLASS   wndclass ;
       
        wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
        wndclass.lpfnWndProc   = WndProc ;
        wndclass.cbClsExtra    = 0 ;
        wndclass.cbWndExtra    = 0 ;
        wndclass.hInstance   = hInstance ;
        wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
        wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
        wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
        wndclass.lpszMenuName= NULL ;
        wndclass.lpszClassName = szAppName ;
       
        if (!RegisterClass (&wndclass))
        {
                MessageBox (NULL, TEXT ("This program requires Windows NT!"),
                        szAppName, MB_ICONERROR) ;
                return 0 ;
        }
       
        hwnd = CreateWindow (szAppName,                  // window class name
                TEXT ("The Hello Program"), // window caption
                WS_OVERLAPPEDWINDOW,      // window style
                CW_USEDEFAULT,            // initial x position
                CW_USEDEFAULT,            // initial y position
                CW_USEDEFAULT,            // initial x size
                CW_USEDEFAULT,            // initial y size
                NULL,                     // parent window handle
                NULL,                     // window menu handle
                hInstance,                  // program instance handle
                NULL) ;                     // creation parameters
       
        ShowWindow (hwnd, iCmdShow) ;
        UpdateWindow (hwnd) ;

        while (GetMessage (&msg, NULL, 0, 0))
        {
                TranslateMessage (&msg) ;
                DispatchMessage (&msg) ;
        }
        return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
        HDC         hdc ;
        PAINTSTRUCT ps ;
        RECT      rect ;
       
        switch (message)
        {
        case WM_SIZE:{
                int cx = LOWORD(lParam);
                int cy = HIWORD(lParam);
                HRGN hgn = CreateEllipticRgn(0,0,cx,cy);
                SetWindowRgn( hwnd, hgn, TRUE );
                return 0;
        }       
        case WM_DESTROY:
                PostQuitMessage (0) ;
                return 0 ;
        }
        return DefWindowProc (hwnd, message, wParam, lParam) ;
}

jkl666 发表于 2014-7-15 20:13:58

仰望天上的光 发表于 2014-7-15 17:40


大神啊。。能不能用纯汇编写,不要win32。。裸机环境下能运行的那种。。
这你也太厉害了

仰望天上的光 发表于 2014-7-15 20:42:03

jkl666 发表于 2014-7-15 20:13
大神啊。。能不能用纯汇编写,不要win32。。裸机环境下能运行的那种。。
这你也太厉害了

       裸机环境下的与操作系统无关的编程需要直接面对不同型号的硬件,用不同的代码来驱动该硬件,在通用计算机上作这个实验吃力不讨好,因为做起来很复杂,但做完了,由于大家的硬件不同,又没有几个人能用.
       我觉得你是厌倦了编程中老是调用别人写的函数,想真正自己彻底实现一个功能,是吗?如果是这样,你可以买块51单片机的开发板,自己在上面试验.由于没有操作系统,无论用汇编还是C语言,本质上都是直接控制硬件的.

智商是硬伤 发表于 2015-8-22 15:37:44

{:7_146:}

waliemiao 发表于 2015-10-15 04:18:57

大神啊。。

damingdingdin 发表于 2015-10-18 11:09:18

绝对是大神啊。。
页: [1]
查看完整版本: 如何将窗口的非客户区做成圆形,而不是在里面添加。