用Win32API怎么分割窗口,有现成的函数吗?如果有请告诉我,没有请告诉我方法
如何在实现向NotePad一样的文本编辑功能,就是说输入汉字,显示光标等功能?

解决方案 »

  1.   

    你可以参考MFC里的CsplitterWnd类看看他们是怎么实现的。
      

  2.   

    没有直接的代码,要自己处理,其实就是分割成两个部分,中间的分割条就用OnSize、OnMouseMove等函数来处理。
      

  3.   

    CSplitterWnd 可以◎!我找找代码!
      

  4.   

    楼上的兄弟:人家要的是Win32API啊,别弄个MFC的代码出来了。
      

  5.   

    www.vcroad.net->SDK路报1->Win32API Tutorials->Splitt Window
      

  6.   

    这篇文章我看了,它把最主要的怎么创建窗口没有写,只有两个函数leftWinMaker()和rightWinMaker(),没有实现过程!!
      

  7.   

    朋友,你问这个问题说明对WINDOWS程序的一些特性不是很清楚。
    分割条其实也是窗口,只不过它很窄,并且当我们的鼠标指针经过这个窗口时,都会变成尖头。在上面点下鼠标时,会响应MOUSEDOWN事件,然后当鼠标移动时候会跟随鼠标移动。
      

  8.   

    不知道你能不能看懂Win32ASM的代码?如果能的话,我还能帮你找找看。
      

  9.   

    我正做这样一个程序的界面(sdk),还没有完成,还不能移动分隔条,做的方法是在同一父窗口下的几个子窗口,谁要?
      

  10.   

    不知道你是不是要做成象资源管理器那样的?如果是的话,用CSplitterwnd类,然后CreateView就可以实现。
      

  11.   

    不知道你是不是要做成象资源管理器那样的?如果是的话,用CSplitterwnd类,然后CreateView就可以实现。
      

  12.   

    * 在WIN32程序设计中不会出现MFC中那样现成的类与方法让你来“分割”窗口,如果要实现由你自己来绘制其中的“分隔条”并在同一窗体中处理好一个数据的两种数据表现。* 在WIN32程序中如果想实现“文本编辑”也不难,有现成的窗口类,但同时要注意几点,一个是在注册窗类时直接使用WINDOWS提供的“Edit”类,再者就是你所创建的窗体中的风格一定要有WS_OVERLAPPEDWINDOWS及WS_VSCROLL或WS_HSCROLL风格。这样一来你就有了基本的“文本编辑”能力,但其它细节还要你来完成,如“滚动条”与视图的同步等等。* 如果不这样你也可以创建自己的窗口类,并处理“文本编辑窗体”中的各个环节:下面写一个简单的示例。这里注册了自己的窗口类,并初步处理了一些基本的环节,使之具有一定的文本编辑能力。#include "stdafx.h"
    #define szRegWnd "MyRegWnd"//自定义窗口类BOOL InitInstance(HINSTANCE ,int);
    ATOM RegisterWnd(HINSTANCE);
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);LONG m_TextHeight; //字体高
    LONG m_TextWidth; //字体宽
    LONG m_TextMaxWidth; //字体最大宽度
    char BufferChar[256]; //字符
    LONG xCaretPos, yCaretPos; //光标位置
    LONG nPos; //滑块位置//WinMain函数
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    MSG msg;
    if(!hPrevInstance)
    RegisterWnd(hInstance); if(!InitInstance(hInstance, nCmdShow))
    return -1; while(GetMessage(&msg, NULL, 0, 0))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    return msg.wParam;
    }//创建窗体
    BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
    {
    HWND Init = CreateWindow(
    szRegWnd,
    "Edit Void",
    WS_OVERLAPPEDWINDOW | WS_VSCROLL,
    0,
    0,
    640,
    480,
    NULL,
    NULL,
    hInstance,
    NULL); if(!Init)
    return FALSE; ShowWindow(Init, nCmdShow);
    UpdateWindow(Init);
    return TRUE;
    }//注册窗口类
    ATOM RegisterWnd(HINSTANCE hInstance)
    {
    WNDCLASSEX wc; wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.hbrBackground = (HBRUSH)COLOR_BTNFACE;
    wc.hCursor = LoadCursor(hInstance, IDC_ARROW);
    wc.hIcon = NULL;
    wc.hIconSm = NULL;
    wc.hInstance = hInstance;
    wc.lpfnWndProc = (WNDPROC)WndProc;
    wc.lpszClassName = szRegWnd;
    wc.lpszMenuName = NULL;
    wc.style = CS_GLOBALCLASS; return RegisterClassEx(&wc);
    }//消息处理
    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    switch(msg)
    {
    case WM_CREATE:
    {
    //获得字体信息
    TEXTMETRIC tm;
    GetTextMetrics(GetDC(hWnd), &tm);
    m_TextHeight = tm.tmHeight + tm.tmExternalLeading;
    m_TextWidth = tm.tmMaxCharWidth;
    m_TextMaxWidth = tm.tmMaxCharWidth + tm.tmAveCharWidth * 2;
    }
    break;
    case WM_DESTROY:
    {
    PostQuitMessage(0);
    }
    break;
    case WM_CHAR://获得键盘字符
    {
    switch(LOWORD(wParam))
    {
    case VK_RETURN: break;
    case VK_BACK: break;
    default:
    {
    TextOut(GetDC(hWnd),
    xCaretPos,
    yCaretPos,
    BufferChar, 
    wsprintf(BufferChar, "%c", (TCHAR)wParam)
    );
    SetCaretPos(xCaretPos + m_TextMaxWidth, yCaretPos);
    }
    }
    }
    break;
    case WM_VSCROLL://滚动条处理
    {
    switch(LOWORD(wParam))
    {
    case SB_THUMBTRACK:
    {
    WORD pos = HIWORD(wParam);
    nPos = pos;
    SetScrollPos(hWnd, SB_VERT, pos, TRUE);
    }
    break;
    case SB_LINEUP:
    {
    nPos > 0 ? nPos-- : nPos = 0;
    SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
    }
    break;
    case SB_LINEDOWN:
    {
    nPos < 100 ? nPos++ : nPos = 100;
    SetScrollPos(hWnd, SB_VERT, nPos, TRUE);
    }
    break;
    }
    }
    break;
    //键盘处理
    case WM_KEYDOWN:
    {
    switch(LOWORD(wParam))
    {
    case VK_UP://移动字符光标
    {
    yCaretPos -= m_TextHeight;
    SetCaretPos(xCaretPos, yCaretPos); //向滚动条发送SB_LINEUP消息
    SendMessage(hWnd, WM_VSCROLL, SB_LINEUP, 0L);
    }
    break;
    case VK_DOWN:
    {
    yCaretPos += m_TextHeight;
    SetCaretPos(xCaretPos, yCaretPos);
    //send msg
    SendMessage(hWnd, WM_VSCROLL, SB_LINEDOWN, 0L);
    }
    break;
    case VK_LEFT:
    {
    xCaretPos -= m_TextWidth;
    SetCaretPos(xCaretPos, yCaretPos);
    }
    break;
    case VK_RIGHT:
    {
    xCaretPos += m_TextWidth;
    SetCaretPos(xCaretPos, yCaretPos);
    }
    break;
    case VK_RETURN://回车
    {
    yCaretPos += m_TextHeight;
    xCaretPos = 0;
    SetCaretPos(xCaretPos, yCaretPos);
    }
    break;
    case VK_DELETE://删除
    {
    MessageBox(hWnd, "删除键\t", "测试", MB_ICONEXCLAMATION | MB_OK);
    }
    break;
    case VK_BACK://后退
    {
    MessageBox(hWnd, "后退键\t", "测试", MB_ICONEXCLAMATION | MB_OK);
    }
    break;
    case VK_INSERT://插入
    {
    MessageBox(hWnd, "插入键\t", "测试", MB_ICONEXCLAMATION | MB_OK);
    }
    break;
    default:
    {
    xCaretPos += m_TextWidth;
    }
    break;
    }
    }
    break;
    case WM_SETFOCUS://光标caret控制
    {
    CreateCaret(hWnd, NULL, 1, m_TextHeight);//创建
    SetCaretPos(0,0);  //定位
    ShowCaret(hWnd);  //显示
    }
    break;
    case WM_KILLFOCUS:
    {
    HideCaret(hWnd);
    DestroyCaret();
    }
    break;
    }
    return DefWindowProc(hWnd, msg, wParam, lParam);
    }