用Win32API怎么事先分割窗口,有现成的函数吗? 用Win32API怎么分割窗口,有现成的函数吗?如果有请告诉我,没有请告诉我方法如何在实现向NotePad一样的文本编辑功能,就是说输入汉字,显示光标等功能? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以参考MFC里的CsplitterWnd类看看他们是怎么实现的。 没有直接的代码,要自己处理,其实就是分割成两个部分,中间的分割条就用OnSize、OnMouseMove等函数来处理。 CSplitterWnd 可以◎!我找找代码! 楼上的兄弟:人家要的是Win32API啊,别弄个MFC的代码出来了。 www.vcroad.net->SDK路报1->Win32API Tutorials->Splitt Window 这篇文章我看了,它把最主要的怎么创建窗口没有写,只有两个函数leftWinMaker()和rightWinMaker(),没有实现过程!! 朋友,你问这个问题说明对WINDOWS程序的一些特性不是很清楚。分割条其实也是窗口,只不过它很窄,并且当我们的鼠标指针经过这个窗口时,都会变成尖头。在上面点下鼠标时,会响应MOUSEDOWN事件,然后当鼠标移动时候会跟随鼠标移动。 不知道你能不能看懂Win32ASM的代码?如果能的话,我还能帮你找找看。 我正做这样一个程序的界面(sdk),还没有完成,还不能移动分隔条,做的方法是在同一父窗口下的几个子窗口,谁要? 不知道你是不是要做成象资源管理器那样的?如果是的话,用CSplitterwnd类,然后CreateView就可以实现。 不知道你是不是要做成象资源管理器那样的?如果是的话,用CSplitterwnd类,然后CreateView就可以实现。 * 在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);} 关于指针删除!小弟拜谢先。 求ip查询算法,根据一个ip,从一个ip库中找出与之区域最近的ip,并按区域远近排序. 请教个基本问题,谢谢不吝赐教者 请问一个线程同步的问题 实在搞不懂,请大家救救我! cmd 你模拟输入 bcg控件使用————编辑菜单用中文出现乱码 请问CJLib最高的版本是多少,我只见到609的! 使用一个example.c程序遇到example.obj : error LNK2001错误很苦恼... 请问下面函数怎么用,谁能给个例子? 坚决支持韩国得冠军,反正也无耻了,就无耻到极点吧!!!! 程序中怎样向系统发送一个鼠标单击消息
分割条其实也是窗口,只不过它很窄,并且当我们的鼠标指针经过这个窗口时,都会变成尖头。在上面点下鼠标时,会响应MOUSEDOWN事件,然后当鼠标移动时候会跟随鼠标移动。
#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);
}