拈花小仙 发表于 2014-11-16 17:50:16

SDK简单的登录界面制作(菜鸟作品)—— 小仙会逐步完善 请大家指点下

#include <Windows.h>

HINSTANCE g_hInstance;
HWND hChild, DengLu;

LRESULT CALLBACK WndProc(HWND hWnd,
                         UINT uMsg,
                         WPARAM wParam,
                         LPARAM lParam);

LRESULT CALLBACK ChildProc(HWND hWnd,
                           UINT uMsg,
                           WPARAM wParam,
                           LPARAM lParam);

void RegisterWnd(LPCTSTR lpClassName,UINT Style,WNDPROC proc)
{
    WNDCLASSEX wce;
    wce.style = Style;
    wce.lpfnWndProc = proc;
    wce.cbSize = sizeof(WNDCLASSEX);
    wce.cbClsExtra = 0;
    wce.cbWndExtra = 0;
    wce.hInstance = g_hInstance;
    wce.hIcon= 0;
    wce.hCursor = 0;
    wce.hIconSm = 0;
    wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
    wce.lpszClassName = lpClassName;
    wce.lpszMenuName = 0;
    if(!RegisterClassEx(&wce))
    {
      MessageBox(NULL,TEXT("注册失败"),TEXT("提示"),MB_OK);
    }

}

HWND CreateWnd(LPCTSTR lpClassName,LPCTSTR name,DWORD Style,HWND hParent)
{
    HWND hWnd = CreateWindowEx(0,lpClassName,name,
      Style,CW_USEDEFAULT,CW_USEDEFAULT,
      CW_USEDEFAULT,CW_USEDEFAULT,hParent,NULL,g_hInstance,NULL);

    return hWnd;
}

void DisplayWnd(HWND hWnd)
{
    ShowWindow(hWnd,SW_SHOW);
    UpdateWindow(hWnd);
}

void Message()
{
    MSG msg;
    while(GetMessage(&msg,NULL,0,0))
    {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
}

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR   lpCmdLine,
                   int       nCmdShow)
{
    g_hInstance = hInstance;

    RegisterWnd(L"denglu",CS_HREDRAW|CS_VREDRAW,WndProc);
    DengLu = CreateWnd(L"denglu",TEXT("登录"),WS_OVERLAPPED|WS_SYSMENU,NULL);
    MoveWindow(DengLu,600,300,280,160,TRUE);
    DisplayWnd(DengLu);

    RegisterWnd(L"Child",CS_HREDRAW|CS_VREDRAW,ChildProc);
   
    Message();

    return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd,
                         UINT uMsg,
                         WPARAM wParam,
                         LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CREATE:
      {
            CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("EDIT"),TEXT("bbs.fishc.com"),
                WS_CHILD|WS_VISIBLE,40,20,200,30,hWnd,HMENU(1001),g_hInstance,NULL);

            CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("BUTTON"),TEXT("登录"),
                WS_CHILD|WS_VISIBLE,40,80,200,30,hWnd,HMENU(1002),g_hInstance,NULL);

            ShowWindow(hWnd,SW_SHOW);
            break;
      }
    case WM_COMMAND:
      {
            switch(wParam)
            {
            case 1002:
                {
                  hChild = CreateWnd(L"Child",TEXT("窗口风格管理"),WS_OVERLAPPED|WS_SYSMENU,DengLu);
                  MoveWindow(hChild,500,300,500,300,TRUE);
                  DisplayWnd(hChild);
                  break;
                }
             }

      }
      break;
    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
    }
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

LRESULT CALLBACK ChildProc(HWND hWnd,
                           UINT uMsg,
                           WPARAM wParam,
                           LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_CREATE:
      {
            ShowWindow(DengLu,SW_HIDE);
      }
    case WM_SYSCOMMAND:
      {
            switch(wParam)
            {
            case SC_CLOSE:
                {
                  ShowWindow(DengLu,SW_SHOW);
                  break;
                }
            }
      }
      break;
    }
    return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
回帖是一种美德,让我们拥有这种美德~

拈花小仙 发表于 2014-11-16 17:52:38

改进后....

本帖最后由 拈花小仙 于 2014-11-16 21:32 编辑

#include <Windows.h>

HINSTANCE g_hInstance;
HWND hChild, DengLu;
HWND hWndEdit;//这个变量接收编辑框的hwnd用来获取内容用的
//获取内容用getwindowtext比getdlgitemtext省事

LRESULT CALLBACK WndProc(HWND hWnd,
                                               UINT uMsg,
                                               WPARAM wParam,
                                               LPARAM lParam);

LRESULT CALLBACK ChildProc(HWND hWnd,
                                                   UINT uMsg,
                                                   WPARAM wParam,
                                                   LPARAM lParam);

void RegisterWnd(LPCTSTR lpClassName,UINT Style,WNDPROC proc)
{
        WNDCLASSEX wce;
        wce.style = Style;
        wce.lpfnWndProc = proc;
        wce.cbSize = sizeof(WNDCLASSEX);
        wce.cbClsExtra = 0;
        wce.cbWndExtra = 0;
        wce.hInstance = g_hInstance;
        wce.hIcon= 0;
        wce.hCursor = 0;
        wce.hIconSm = 0;
        wce.hbrBackground = HBRUSH(COLOR_BTNFACE + 1);
        wce.lpszClassName = lpClassName;
        wce.lpszMenuName = 0;
        if(!RegisterClassEx(&wce))
        {
                MessageBox(NULL,TEXT("注册失败"),TEXT("提示"),MB_OK);
        }

}

HWND CreateWnd(LPCTSTR lpClassName,LPCTSTR name,DWORD Style,HWND hParent)
{
        HWND hWnd = CreateWindowEx(0,lpClassName,name,
                Style,CW_USEDEFAULT,CW_USEDEFAULT,
                CW_USEDEFAULT,CW_USEDEFAULT,hParent,NULL,g_hInstance,NULL);

        return hWnd;
}

void DisplayWnd(HWND hWnd)
{
        ShowWindow(hWnd,SW_SHOW);
        UpdateWindow(hWnd);
}

void Message()
{
        MSG msg;
        while(GetMessage(&msg,NULL,0,0))
        {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
        }
}

int WINAPI WinMain(HINSTANCE hInstance,
                                   HINSTANCE hPrevInstance,
                                   LPSTR   lpCmdLine,
                                   int       nCmdShow)
{
        g_hInstance = hInstance;

        RegisterWnd(L"denglu",CS_HREDRAW|CS_VREDRAW,WndProc);
        DengLu = CreateWnd(L"denglu",TEXT("登录"),WS_OVERLAPPED|WS_SYSMENU,NULL);
        MoveWindow(DengLu,600,300,280,160,TRUE);
        DisplayWnd(DengLu);

        RegisterWnd(L"Child",CS_HREDRAW|CS_VREDRAW,ChildProc);

        Message();

        return 0;
}

LRESULT CALLBACK WndProc(HWND hWnd,
                                               UINT uMsg,
                                               WPARAM wParam,
                                               LPARAM lParam)
{
        switch(uMsg)
        {
        case WM_CREATE:
                {
                        hWndEdit = CreateWindowExW(WS_EX_CLIENTEDGE,TEXT("EDIT"),TEXT("bbs.fishc.com"),
                                WS_CHILD|WS_VISIBLE,40,20,200,30,hWnd,HMENU(1001),g_hInstance,NULL);

                        CreateWindowEx(WS_EX_CLIENTEDGE,TEXT("BUTTON"),TEXT("登录"),
                                WS_CHILD|WS_VISIBLE,40,80,200,30,hWnd,HMENU(1002),g_hInstance,NULL);

                        ShowWindow(hWnd,SW_SHOW);
                        break;
                }
        case WM_COMMAND:
                {
                        switch(wParam)
                        {
                        case 1002:
                                {
                                        TCHAR szText;
                                        GetWindowText(hWndEdit,szText,-1);

                                        if(lstrcmp(szText,TEXT("bbs.fishc.com"))!=0)//输入和预置的不对应
                                                return 0;//就返回
                                        //正确就执行下面
                                                MessageBox(NULL,TEXT("输入正确,可以登录"),TEXT("Go"),MB_OK|MB_ICONINFORMATION);
                                        hChild = CreateWnd(L"Child",TEXT("窗口风格管理"),WS_OVERLAPPED|WS_SYSMENU,DengLu);
                                        MoveWindow(hChild,500,300,500,300,TRUE);
                                        DisplayWnd(hChild);
                                       
                                }
                        }
                        break;//你这里忘了写break

                }
               
        case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
        }
        return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

LRESULT CALLBACK ChildProc(HWND hWnd,
                                                   UINT uMsg,
                                                   WPARAM wParam,
                                                   LPARAM lParam)
{
        switch(uMsg)
        {
        case WM_MOUSEWHEEL:
                {
            RECT rc,rc1;//rc获得窗口相对于桌面的矩形    rc1要调整的矩形   
            GetWindowRect(hWnd,&rc);
                        rc1=rc;//调整用的矩形先弄的和窗口矩形一样大

            if((int)wParam<0)//往下滚轮,让窗口扩大
            {
                                rc1.right=rc.right-rc.left +10;
                                rc1.bottom=rc.bottom-rc.top+10;
            }
            else
            {
                                rc1.right=rc.right-rc.left-10;
                                rc1.bottom=rc.bottom-rc.top-10;
            }
               MoveWindow(hWnd,rc1.left, rc1.top,rc1.right,rc1.bottom,TRUE);
            break;
      }

        case WM_CREATE:
                {
                        ShowWindow(DengLu,SW_HIDE);
                        break;
                }
        case WM_SYSCOMMAND:
                {
                        switch(wParam)
                        {
                        case SC_CLOSE:
                                {
                                        ShowWindow(DengLu,SW_SHOW);
                                        break;
                                }
                        }
                }
                break;
        }
        return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

Angel丶L 发表于 2014-11-16 17:54:50

来看看支持下。

~风介~ 发表于 2014-11-16 18:06:32

仙仙,代码报错咯~{:5_91:}


另外,为什么不上传exe文件呢?{:5_92:}

小人 发表于 2014-11-16 18:07:15

c的痛苦之处,写个窗口 代码太多,不过学了很有用
学会API 在学mfc

拈花小仙 发表于 2014-11-16 18:13:03

~风介~ 发表于 2014-11-16 18:06
仙仙,代码报错咯~




不清楚啦,我这里运行的很好呀,这里又没显示建错项目,555~

拈花小仙 发表于 2014-11-16 18:13:51

小人 发表于 2014-11-16 18:07
c的痛苦之处,写个窗口 代码太多,不过学了很有用
学会API 在学mfc

~风介~ 发表于 2014-11-16 18:18:47

拈花小仙 发表于 2014-11-16 18:13
不清楚啦,我这里运行的很好呀,这里又没显示建错项目,555~

那就把exe文件穿给介介看看吧~{:5_109:}

拈花小仙 发表于 2014-11-16 18:21:50

~风介~ 发表于 2014-11-16 18:18
那就把exe文件穿给介介看看吧~


嘻嘻,虽然有点菜啦,但是仙仙花了一下午时间写的

拈花小仙 发表于 2014-11-16 18:22:49

~风介~ 发表于 2014-11-16 18:18
那就把exe文件穿给介介看看吧~


介介建的是这个吗?

拈花小仙 发表于 2014-11-16 18:29:53

小人 发表于 2014-11-16 18:07
c的痛苦之处,写个窗口 代码太多,不过学了很有用
学会API 在学mfc

还是做不出来,唉

小人 发表于 2014-11-16 18:32:47

拈花小仙 发表于 2014-11-16 10:29
还是做不出来,唉

比我牛多了,{:9_240:}

拈花小仙 发表于 2014-11-16 18:37:02

小人 发表于 2014-11-16 18:32
比我牛多了,

我查了下两个函数都能实现,我只能按楼层给了,以后多答题呀。

小人 发表于 2014-11-16 18:41:57

拈花小仙 发表于 2014-11-16 10:37
我查了下两个函数都能实现,我只能按楼层给了,以后多答题呀。

没事,我帮助别人的同时 也给自己涨姿势 多接触 加深印象{:9_217:}

~风介~ 发表于 2014-11-16 18:43:46

拈花小仙 发表于 2014-11-16 18:21
嘻嘻,虽然有点菜啦,但是仙仙花了一下午时间写的

怎么会!介介都看不懂~{:5_109:}

~风介~ 发表于 2014-11-16 18:44:50

拈花小仙 发表于 2014-11-16 18:22
介介建的是这个吗?

没错哟!哈哈~待我有时间慢慢查bug~{:7_139:}

拈花小仙 发表于 2014-11-16 18:45:13

~风介~ 发表于 2014-11-16 18:43
怎么会!介介都看不懂~

{:7_139:}介介会QT,学这个半个月因该就会了

拈花小仙 发表于 2014-11-16 18:47:18

~风介~ 发表于 2014-11-16 18:44
没错哟!哈哈~待我有时间慢慢查bug~

{:7_131:}

coffeemlx 发表于 2014-11-16 18:47:38

楼主好样的!

q2692988 发表于 2014-11-16 20:00:55

{:1_1:},,支持呵呵。。。
页: [1] 2 3
查看完整版本: SDK简单的登录界面制作(菜鸟作品)—— 小仙会逐步完善 请大家指点下