发布网友 发布时间:2022-04-23 22:49
共5个回答
热心网友 时间:2023-10-12 17:34
先解释原理:
自定义外观实际上就是先将标题栏去掉,然后在上面用图片替代原来的界面,以使得界面更美观。然而之后问题也出来了,没有了标题栏,最大化最小化怎么处理,怎么拖动窗口,这个就需要利用API函数对相应部分进行定义,以及各种小技巧,所以操作起来会比较麻烦。
解决方法:
采用第三方控件,VB支持添加“部件”,这样就可以用别人已经做好的控件直接来帮助我们做界面,不过界面基本是别人定好的,我们可以做一定改动,有点类似于c++里面用类的感觉,别人做好的直接用就行了。相关界面空间在很多网站都能下载,比如有人说得http://www.activex.com.cn/interface_activex/
这些都不错。具体操作如果 子韬 你还需要问得话请具体说出。
谢谢!
热心网友 时间:2023-10-12 17:35
菜单资源及其创建的程序
//Menu.c
#define IDM_NEW
#define IDM_OPEN
#define IDM_CLOSE
#define IDM_SAVE
#define IDM_SAVES
#define IDM_ADDPRINTMENU
#define IDM_DELPRINTMENU
#define IDM_EXIT
#define IDM_CUT
#define IDM_COPY
#define IDM_PASTE
#define IDM_DELETE
#define IDM_HELP
#define IDM_LINE
#define IDM_RECT
#define IDM_RRECT
#define IDM_ELLTP
本程序的源程序代码如下
#include<windos.h>
#include”7-1.h”
HMENU hmen,hprintmenu;//定义菜单句柄
LRESULT CALLBACK Wndproc(HWND,UINT,EPARAM,LPARAM);
Int WINAPI WinMain
(
HINSTANCE hInstance,
HINSTANCE hPrevInst,
LPSTR lpszCmdLine,
Int nCmdShow
)
{
HWND hwnd;
MSG msg;
HACCEL hAccel;
WNDCJASS wndclass;
char lpszMenuName[]=”Menu”;
char lpszClassName[]= “菜单”;
char lpszTitle[]=”My-Menu-Example”;
wndclass.style=0;
wndclass.lpfnWndproc=Wndproc;
wndclass.cbClsExtra=0
wndclass.cbWndExtra=0
wndclass.hInstance=hInstance;
wndclass.hiCon=LoadIcon(NULL,IDC-APPLICATION);
wndclass.hCursor=LOADCursor(NULL,IDC-ARROW);
wndclass.hbrBackground=GetStockobject(WHITE-BRUSH);
wndclass.lpszMenuName=lpszMenuName;//加载窗口类菜单
wndclass.lpszClassName=lpszClassName;
if(!RegisterClass(&wndclass))
{
MessageBeep(0);
return FALSE;
}
hwnd=Createwindow
(
lpszClassName,
lpszTitle,
WSOVERLAPPEDWINDOW,
CW-USEDEFAULT,
CW-USEDEFAULT,
CW-USEDEFAULT,
CW-USEDEFAULT,
NULL,
NULL,
hInstance,
NULL,
);
ShowWindow(hwnd,nCmdshow);
UpdateWindow(hwnd);
//加载加速键资源
hAccel=LoadAccelerators(hInstance,lpszMenuName);
while(GetMessage(&Msg,NULL,0,0)
{
//在消息循环中截获加速键消息
if(!TranslateAccelerator(hwnd,hAccel,&Msg))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
return Msg.wparam;
}
LRESULT CALLBACK Wndproc
(
HWND hend,
UINT message,
WPARAM wparam.
LPARAM lparam
)
}
swith(message)
{
//处理菜单消息
case WM-COMMAND:
swith(LOWORD(wparam))
{
case IDM-NEW:
break;
case IDM-OPEN:
break;
case IDM-SAVE:
break;
case IDM-SAVEAS:
break;
case IDM-CLOSE:
break;
//在主菜单栏中添加“统计计算”菜单
case IDM-ADDPRINTMENU:
//获取主菜单句柄;
hmenu=GetMenu(hwnd);
//动态创建菜单;
hprintmenu=CreatMenu();
//在创建的菜单中增加菜单项
AppendMenu(hprintmenu,MF_ENABLED,IDM_LINE,“求和”);
AppendMenu(hprintmenu,MF_ENABLED,IDM_RECT,“方差”);
AppendMenu(hprintmenu,MF_ENABLED,IDM_RRECT,“平均值”);
AppendMenu(hprintmenu,MF_ENABLED,IDM_ELLTP,“均方根”);
//将创建的弹出式菜单插入主菜单中
InseartMenu(hmenu,2,MF_POPUP|MF_BYPOSITION,(UINT)hprintmenu,“统计计算(&C)”);
//相应改变菜单中有关统计计算单项的属性
EnableMenuItem(hmenu,IDN_ADDPRINTMENU,MF_MF_ GRAYED);
EnableMenuItem(hmenu,IDN_DEL PRINTMENU,MF_MF_ ENABLED);
DrawMenuBar(hwnd); //重新显示窗口菜单
Break:
//从主菜单中删除弹出式统计计算菜单
case IDM_DELPRINTMENU;
DeleteMenu(hmenu,2,MF_BYPOSITION);删除统计计算菜单项
//相应改变“文件”菜单中有关统计计算菜单项的属性
EnableMenuItem(hmenu,IDN_ADDPRINTMENU,MF_MF_ENABLED);
EnableMenuItem(hmenu,IDN_DEL PRINTMENU,MF_MF_GRAYED);
DrawMenuBar(hwnd); //重新显示窗口菜单
Break:
//选择“退出”菜单项时,向应用程序发出WM_DESTORY消息
SendMessage(hwnd, WM_DESTORY,0,0);
break;
case IDM_CUT;
break;
case IDM_COPY;
break;
case IDM_PASTE
break;
case IDM_DEJETE:
break;
}
break;
case WM_DESTORY;
PostQuitMessage(0);
Break;
Default;
Return DefWundosProc(hwnd,message,wParam,Iparam);
}
return 0;
}
MENU MENU DISCARDABLE
BEGIN
POPUP “文件(&F)”;
BEGIN
MENUITEM “新建(&N)\t Ctrl+N”, IDM_NEW
MENUITEM “打开”(&O)\tCtrl+O”, IDM_OPEN
MENUITEM “关闭”(&C)”, IDM_CLOSE
MENUITEM SEPARATOR
MENUITEM “保存”(&S)\t Ctrl+S”, IDM_SAVE
MENUITEM “另存为”(&A)”, IDM_SAVES
MENUITEM SEPARATOR
MENUITEM “创建统计计算菜单项(&P)\ t Ctrl+P”, IDM_ADDPRINTMENU
MENUITEM “删除统计计算菜单项(&D)\t Ctrl+D”, IDM_DELPRINTMENU,GRAYED
MENUITEM SEPARATOR
MENUITEM “退出“(&X)”, IDM_EXIT
END
POPUP “编辑(&E)”
BEGIN
MENUITEM “剪贴(&T)\t Ctrl+X”, IDM_CUT
MENUITEM “复制(&C)\t Ctrl+C”, IDM_COPY
MENUITEM “粘贴(&P)\t Ctrl+P”, IDM_PASTE
MENUITEM “删除(&D)\t Ctrl+D, IDM_DELETE
END
MENUITEM “帮助(&H)\t Ctrl+H, IDM_HELP
END
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////Accelerator
//
MENU ACCELERATORS NIVEABLE PURE
BEGIN
“N” IDM_NEW, ASCII
“O” IDM_OPEN, ASCII
“S” IDM_SAVE, ASCII
“P” IDM_ADDPRINTMENU, ASCII
“D” IDM_DELPRINTMENU, ASCII
“X” IDM_CUT, ASCII
“C” IDM_COPY, ASCII
“V” IDM_PASTE, ASCII
VK_DELETE, IDM_DELETE, VIRTKEY
END
热心网友 时间:2023-10-12 17:35
我看你的意思是象瑞星/金山一样, 有很好看的外观.这比较难, 只能给你说说思路
1. 你可以不要标题栏, 然后用各种控件摆布外观.这种方法是取巧, 不过金山也是这样用的.
2. 你去下个皮肤吧. 到GOOGLE里找, skins, 这样简单些
3. 当然, 你还可以用API直接绘制标题栏及每一个部份, 不过这方面VC强些, 但也很少有人这样用.很麻烦
热心网友 时间:2023-10-12 17:36
在显示属性中选择外观选项,点击右下角的高级按钮,在项目中选择活动窗口标题栏,改变大小到你觉得合适的就可以了。
热心网友 时间:2023-10-12 17:37
其实不必那么困难,我有一个Shaper控件
(网上好像找不到了,如果你能找到最好,找不到加我QQ)
然后我在QQ上教你怎么用
QQ:263068282(请注明:索Shaper控件)
真的,不骗你
这个控件在网上已经绝种了!
你可以先加我亲切,试好了再给分.
一句代码就能实现窗体自定义形状!