GacUI学习(二)
GacUI学习(一)之高仿系统记事本(二)
转载请注明来源:http://www.cnblogs.com/lyfh/p/6107614.html
上篇《GacUI学习(一)之高仿系统记事本(一)》已经将全局排版布局搞定了,本篇将创建菜单,并进行处理菜单事件。
记事本菜单主要有文件、编辑、格式、查看、帮助这五个,故可以在TextBoxEditorWindow类中添加一个GuiToolstripMenuBar类型的主菜单(MainMenu)用来放置五个GuiToolstripButton类型的菜单,然后每个GuiToolstripButton类的菜单里面再次添加相应的GuiToolstripButton类的子菜单。具体代码如下
private: //GuiControls
GuiToolstripMenuBar* MainMenu; //主菜单
GuiToolstripButton* FileMenu; //"文件"菜单
GuiToolstripButton* NewMenu; //"新建"菜单
GuiToolstripButton* OpenMenu; //"打开"菜单
GuiToolstripButton* SaveMenu; //"保存"菜单
GuiToolstripButton* SaveAsMenu; //"另存为"菜单
GuiToolstripButton* SetPageMenu; //"页面设置"菜单
GuiToolstripButton* PrintMenu; //"打印"菜单
GuiToolstripButton* ExitMenu; //"退出"菜单 GuiToolstripButton* EditMenu; //"编辑"菜单
GuiToolstripButton* UndoMenu; //"撤销"菜单
GuiToolstripButton* CutMenu; //"剪切"菜单
GuiToolstripButton* CopyMenu; //"复制"菜单
GuiToolstripButton* PasteMenu; //"粘贴"菜单
GuiToolstripButton* DeleteMenu; //"删除"菜单
GuiToolstripButton* FindMenu; //"查找"菜单
GuiToolstripButton* FindNextMenu; //"查找下一个"菜单
GuiToolstripButton* ReplaceMenu; //"替换"菜单
GuiToolstripButton* GotoMenu; //"转到"菜单
GuiToolstripButton* SelectAllMenu; //"全选"菜单
GuiToolstripButton* DateMenu; //"时间/日期"菜单 GuiToolstripButton* FormatMenu; //"格式"菜单
GuiToolstripButton* AutoWrapMenu; //"自动换行"
GuiToolstripButton* FontTypeMenu; //"字体" GuiToolstripButton* ViewMenu; //"查看"菜单
GuiToolstripButton* StatusBarMenu; //"状态栏" GuiToolstripButton* HelpMenu; //"帮助"菜单
GuiToolstripButton* AboutMenu; //"关于" GuiMultilineTextBox* MainTextBox; //最主要的一个多行编辑框
具体意义可以参见注释,因为菜单事件最后会设计中间的编辑框(MainTextBox)的操作,所以我们本篇也将创建出中间的编辑框。按照从上往下的顺序,先创建菜单,同样在构造函数中
//下面自创一个菜单栏
{
GuiCellComposition* MainMenuCell = new GuiCellComposition;
table->AddChild(MainMenuCell);
MainMenuCell->SetSite(, , , ); //创建主菜单
GuiToolstripMenuBar* MainMenu = g::NewMenuBar();
MainMenu->GetBoundsComposition()->SetMinSizeLimitation(GuiGraphicsComposition::LimitToElementAndChildren);
MainMenu->GetBoundsComposition()->SetAlignmentToParent(Margin(, , , )); MainMenuCell->AddChild(MainMenu->GetBoundsComposition());
//文件菜单
{
FileMenu = g::NewMenuBarButton();
FileMenu->SetText(L"文件(F)");
FileMenu->SetAlt(L"F");
MainMenu->GetToolstripItems().Add(FileMenu); //文件子菜单
{
//"新建"菜单项
NewMenu = g::NewMenuItemButton();
NewMenu->SetText(L"新建(M)");
NewMenu->SetAlt(L"N");
NewMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::NewMenu_OnClicked);
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(NewMenu);
//"打开"菜单项
OpenMenu = g::NewMenuItemButton();
OpenMenu->SetText(L"打开(O)...");
OpenMenu->SetAlt(L"O");
OpenMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::OpenMenu_OnClicked);
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(OpenMenu);
//"保存"菜单项
SaveMenu = g::NewMenuItemButton();
SaveMenu->SetText(L"保存(S)");
SaveMenu->SetAlt(L"S");
SaveMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::SaveMenu_OnClicked);
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(SaveMenu);
//"另存为"菜单
SaveAsMenu = g::NewMenuItemButton();
SaveAsMenu->SetText(L"另存为(A)...");
SaveAsMenu->SetAlt(L"A");
SaveAsMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::SaveAsMenu_OnClicked);
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(SaveAsMenu);
//分割条
GuiControl* FileSplitter1 = g::NewMenuSplitter();
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(FileSplitter1);
//"页面设置"菜单
SetPageMenu = g::NewMenuItemButton();
SetPageMenu->SetText(L"页面设置(U)...");
SetPageMenu->SetAlt(L"U");
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(SetPageMenu);
//"打印"菜单
PrintMenu = g::NewMenuItemButton();
PrintMenu->SetText(L"打印(P)...");
PrintMenu->SetAlt(L"P");
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(PrintMenu);
//分割条
GuiControl* FileSplitter2 = g::NewMenuSplitter();
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(FileSplitter2);
//"退出"菜单项
ExitMenu = g::NewMenuItemButton();
ExitMenu->SetText(L"退出(X)");
ExitMenu->SetAlt(L"X");
ExitMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::ExitMenu_OnClicked);
FileMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(ExitMenu);
}
} //编辑菜单
{
EditMenu = g::NewMenuBarButton();
EditMenu->SetText(L"编辑(E)");
EditMenu->SetAlt(L"E");
MainMenu->GetToolstripItems().Add(EditMenu); //编辑子菜单
{
//"撤销"菜单
UndoMenu = g::NewMenuItemButton();
UndoMenu->SetText(L"撤销(U)");
UndoMenu->SetAlt(L"U");
UndoMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::UndoMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(UndoMenu); GuiControl* EditSplitter1 = g::NewMenuSplitter();
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(EditSplitter1); //"剪切"菜单
CutMenu = g::NewMenuItemButton();
CutMenu->SetText(L"剪切(T)");
CutMenu->SetAlt(L"T");
CutMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::CutMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(CutMenu); //"复制"菜单
CopyMenu = g::NewMenuItemButton();
CopyMenu->SetText(L"复制(C)");
CopyMenu->SetAlt(L"C");
CopyMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::CopyMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(CopyMenu); //"粘贴"菜单
PasteMenu = g::NewMenuItemButton();
PasteMenu->SetText(L"粘贴(P)");
PasteMenu->SetAlt(L"P");
PasteMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::PasteMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(PasteMenu); //"删除"菜单
DeleteMenu = g::NewMenuItemButton();
DeleteMenu->SetText(L"删除(L)");
DeleteMenu->SetAlt(L"L");
DeleteMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::DeleteMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(DeleteMenu); GuiControl* EditSplitter2 = g::NewMenuSplitter();
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(EditSplitter2); //查找
FindMenu = g::NewMenuItemButton();
FindMenu->SetText(L"查找(F)...");
FindMenu->SetAlt(L"F");
FindMenu->SetShortcutText(L"Ctrl+F"); FindMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::FindMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(FindMenu); //查找下一个
FindNextMenu = g::NewMenuItemButton();
FindNextMenu->SetText(L"查找下一个(N)");
FindNextMenu->SetAlt(L"N");
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(FindNextMenu); //替换
ReplaceMenu = g::NewMenuItemButton();
ReplaceMenu->SetText(L"替换(R)...");
ReplaceMenu->SetAlt(L"R");
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(ReplaceMenu); //转到
GotoMenu = g::NewMenuItemButton();
GotoMenu->SetText(L"转到(G)...");
GotoMenu->SetAlt(L"G");
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(GotoMenu); GuiControl* EditSplitter3 = g::NewMenuSplitter();
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(EditSplitter3); //全选
SelectAllMenu = g::NewMenuItemButton();
SelectAllMenu->SetText(L"全选(A)");
SelectAllMenu->SetAlt(L"A");
SelectAllMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::SelectAllMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(SelectAllMenu); //时间/日期
DateMenu = g::NewMenuItemButton();
DateMenu->SetText(L"时间/日期(D)");
DateMenu->SetAlt(L"D");
DateMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::DateMenu_OnClicked);
EditMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(DateMenu);
}
} //"格式"菜单
{
FormatMenu = g::NewMenuBarButton();
FormatMenu->SetText(L"格式(O)");
FormatMenu->SetAlt(L"O");
MainMenu->GetToolstripItems().Add(FormatMenu); //格式子菜单
{
//自动换行
AutoWrapMenu = g::NewMenuItemButton();
AutoWrapMenu->SetText(L"自动换行(W)");
AutoWrapMenu->SetAlt(L"W");
FormatMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(AutoWrapMenu); //字体
FontTypeMenu = g::NewMenuItemButton();
FontTypeMenu->SetText(L"字体(F)...");
FontTypeMenu->SetAlt(L"F");
FormatMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(FontTypeMenu);
}
} //"查看"菜单
{
ViewMenu = g::NewMenuBarButton();
ViewMenu->SetText(L"查看(V)");
ViewMenu->SetAlt(L"V");
MainMenu->GetToolstripItems().Add(ViewMenu); //查看子菜单
{
StatusBarMenu = g::NewMenuItemButton();
StatusBarMenu->SetText(L"状态栏(S)");
StatusBarMenu->SetAlt(L"S"); ViewMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(StatusBarMenu);
}
} //"帮助"菜单
{
HelpMenu = g::NewMenuBarButton();
HelpMenu->SetText(L"帮助(H)");
HelpMenu->SetAlt(L"H");
MainMenu->GetToolstripItems().Add(HelpMenu); //帮助子菜单
{
AboutMenu = g::NewMenuItemButton();
AboutMenu->SetText(L"关于GacTextBox");
AboutMenu->SetAlt(L"A");
HelpMenu->EnsureToolstripSubMenu()->GetToolstripItems().Add(AboutMenu);
}
}
}
按照上篇所述,创建菜单项,首先要创建一个GuiCellComposition,然后将此GuiCellComposition添加到前面创建的table里面,并SetSite()到第一行第一列,因为table本身就只有一列,故设置此GuiCellComposition占据一列。值得一提的是当我们把一个控件或者一个排版布局添加到它的父时,GacUI为自行处理控件,并管理对应的内存,所以此处我们直接new出类,然后添加,后面不需要delete,否则会造成二次delete。GacUI已经处理了常见的快捷键,所以创建菜单时,可以直接在对应的菜单上面SetAlt()即可设置Alt+快捷键。
上面的代码其实没有写完,只实现了对部分菜单的事件处理。对于菜单以及没有用到的按钮类,基本事件就是鼠标点击(Click),此处正是用了Clicked事件,然后将事件与对应的 MenuName_OnClick()“链接”起来,eg:
UndoMenu->Clicked.AttachMethod(this, &TextBoxEditorWindow::UndoMenu_OnClicked);
此处的UndoMenu_OnClicked即为我们自定义的一个事件处理函数,此函数有固定格式,用到了模板,本人对C++模板几乎完全不懂,故不作说明,此处可以固定为
void Func(GuiGraphicsComposition* sender, GuiEventArgs& arguments)
以此类推,对应的代码如下:
void TextBoxEditorWindow::UpdateEditMenuStatus()
{
UndoMenu->SetEnabled(MainTextBox->CanUndo());
CutMenu->SetEnabled(MainTextBox->CanCut());
CopyMenu->SetEnabled(MainTextBox->CanCopy());
PasteMenu->SetEnabled(MainTextBox->CanPaste());
DeleteMenu->SetEnabled(MainTextBox->CanCut()); } void TextBoxEditorWindow::window_OnClipboardUpdated(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
UpdateEditMenuStatus();
} void TextBoxEditorWindow::NewMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
GetCurrentController()->DialogService()->ShowMessageBox(this->GetNativeWindow(),
L"功能暂未实现!",
L"GacTextBox",
INativeDialogService::DisplayOK,
INativeDialogService::DefaultFirst,
INativeDialogService::IconInformation,
INativeDialogService::ModalWindow);
} void TextBoxEditorWindow::OpenMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
GuiOpenFileDialog* OpenFile = new GuiOpenFileDialog;
OpenFile->SetFilter(L"文本文档(*.txt)|*.txt|所有文件(*.*)|*.*");
OpenFile->SetDefaultExtension(L"txt");
this->AddComponent(OpenFile); if (OpenFile->ShowDialog())
{
CurrentFilePath = OpenFile->GetFileName();
this->SelectOpenModeComboBox->SetSelectedIndex();
//默认以Ansi方式读取文件
WString OpenFileData = ReadFileByAnsi(CurrentFilePath);
//WString OpenFileData = ReadFileByUTF8(CurrentFilePath);
//WString OpenFileData = ReadFileByUTF16LE(CurrentFilePath); MainTextBox->SetText(OpenFileData);
WString WindowsTitle = CurrentFilePath + L" -GacTextBox";
this->SetText(WindowsTitle);
} this->RemoveComponent(OpenFile);
delete OpenFile;
} void TextBoxEditorWindow::SaveMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
//如果MainTextBox内容发生改变,点击保存按钮才有反应
if (bIsTextChanged == true)
{
//如果CurrentPath为空,则表明没有打开文件
if (CurrentFilePath.Length() == )
{
GuiSaveFileDialog* SaveFile = new GuiSaveFileDialog;
SaveFile->SetFilter(L"文本文档(*.txt)|*.txt|所有文件(*.*)|*.*");
SaveFile->SetDefaultExtension(L"txt");
SaveFile->SetTitle(L"保存");
this->AddComponent(SaveFile); if (SaveFile->ShowDialog())
{
CurrentFilePath = SaveFile->GetFileName();
}
else
return;
this->RemoveComponent(SaveFile);
delete SaveFile;
} bool bResult;
if (CurrentEncoding == L"UTF8")
{
bResult = WriteFileByUTF8(CurrentFilePath, MainTextBox->GetText());
}
else if (CurrentEncoding == L"UTF16LE")
{
bResult = WriteFileByUTF16LE(CurrentFilePath, MainTextBox->GetText());
}
else
{
bResult = WriteFileByAnsi(CurrentFilePath, MainTextBox->GetText());
} this->SetText(CurrentFilePath + L" -GacTextBox");
}
} void TextBoxEditorWindow::SaveAsMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
GuiSaveFileDialog* SaveFile = new GuiSaveFileDialog;
SaveFile->SetFilter(L"文本文档(*.txt)|*.txt|所有文件(*.*)|*.*");
SaveFile->SetDefaultExtension(L"txt");
SaveFile->SetTitle(L"保存");
SaveFile->SetOptions(INativeDialogService::FileDialogPromptOverwriteFile);
this->AddComponent(SaveFile); if (SaveFile->ShowDialog())
{
CurrentFilePath = SaveFile->GetFileName();
}
else
return;
this->RemoveComponent(SaveFile);
delete SaveFile; bool bResult;
if (CurrentEncoding == L"UTF8")
{
bResult = WriteFileByUTF8(CurrentFilePath, MainTextBox->GetText());
}
else if (CurrentEncoding == L"UTF16LE")
{
bResult = WriteFileByUTF16LE(CurrentFilePath, MainTextBox->GetText());
}
else
{
bResult = WriteFileByAnsi(CurrentFilePath, MainTextBox->GetText());
} /*
stream::FileStream* SaveFileStream = new stream::FileStream(CurrentFilePath, stream::FileStream::WriteOnly);
if (!SaveFileStream->IsAvailable())
{
GetCurrentController()->DialogService()->ShowMessageBox(this->GetNativeWindow(),
L"保存文件失败!",
L"GacTextBox",
INativeDialogService::DisplayOK,
INativeDialogService::DefaultFirst,
INativeDialogService::IconInformation,
INativeDialogService::ModalWindow);
return;
} SaveFileStream->Write((void*)(MainTextBox->GetText().Buffer()),
MainTextBox->GetText().Length());
delete SaveFileStream;
*/
this->SetText(CurrentFilePath + L" -GacTextBox"); } void TextBoxEditorWindow::ExitMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
PostQuitMessage();
} void TextBoxEditorWindow::UndoMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
MainTextBox->Undo();
} void TextBoxEditorWindow::PasteMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
MainTextBox->Paste();
MainTextBox->SetFocus();
} void TextBoxEditorWindow::CopyMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
MainTextBox->Copy();
MainTextBox->SetFocus();
} void TextBoxEditorWindow::CutMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
MainTextBox->Cut();
MainTextBox->SetFocus();
} void TextBoxEditorWindow::DeleteMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
MainTextBox->SetSelectionText(L"");
MainTextBox->SetFocus();
} void TextBoxEditorWindow::SelectAllMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
MainTextBox->SelectAll();
MainTextBox->SetFocus();
} void TextBoxEditorWindow::FindMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
FindTextWindow* findtextwindow = new FindTextWindow;
findtextwindow->GetNativeWindow()->SetParent(this->GetNativeWindow());
findtextwindow->MoveToScreenCenter();
findtextwindow->Show(); } void TextBoxEditorWindow::DateMenu_OnClicked(GuiGraphicsComposition * sender, GuiEventArgs & arguments)
{
SYSTEMTIME systime;
GetLocalTime(&systime);
wchar_t *szTimeW = new wchar_t[];
memset(szTimeW, NULL, * sizeof(wchar_t));
swprintf_s(szTimeW, , L"%4d/%02d/%02d %02d:%02d", systime.wYear, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute); WString TimeStrW = szTimeW;
MainTextBox->SetSelectionText(TimeStrW);
delete[] szTimeW;
}
由于此程序没有写完,所以此代码也不是完整的,待我完成整个程序后再更新
GacUI学习(二)的更多相关文章
- GacUI学习(一)
GacUI学习(一)之高仿系统记事本(一) 转载请注明来源:http://www.cnblogs.com/lyfh/p/6107215.html GacUI是轮子哥(vczh)精心打造的跨平台C++转 ...
- emberjs学习二(ember-data和localstorage_adapter)
emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...
- ReactJS入门学习二
ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...
- TweenMax动画库学习(二)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) Tw ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
- Struts2框架学习(二) Action
Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...
- Python学习二:词典基础详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
- SpringCloud学习(二):微服务入门实战项目搭建
一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...
随机推荐
- JQuery实现对勾事件代码
1.JQuery选择器中使用变量实现动态选择解决方案: <table> <tr> <th>用户名</th> <th>状态</th ...
- Guava学习笔记:Guava新增集合类型-Multiset
Guava引进了JDK里没有的,但是非常有用的一些新的集合类型.所有这些新集合类型都能和JDK里的集合平滑集成.Guava集合非常精准地实现了JDK定义的接口.Guava中定义的新集合有: Multi ...
- 如何创建C# Closure ?
JavaScript中一个重要的概念就是闭包,闭包在JavaScript中有大量的应用,但是你知道么?C#也可以创建Closure.下面就介绍一下如何在C#中创建神奇的闭包. 在这之前,我们必须先知道 ...
- 免费的 Photoshop Apple Watch 原型设计素材
大量的扁平化的苹果设备原型展示了响应式的 Web 设计.这是一组免费的 Photoshop Apple Watch 原型 PSD 设计素材,文件包括 iPhone.iPad. iMac 和 Macbo ...
- JavaScript 事件入门
一.事件介绍 JavaScript 有三种事件模型:内联模型.脚本模型和 DOM2 模型. 二.内联模型 //在 HTML 中把事件处理函数作为属性执行 JS 代码 <input type=&q ...
- WinForm-GridView
前端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CKXM.aspx. ...
- DEV柱状图----傻瓜版
this.chartControl1.Series.Clear();//清空 //获得数据 sqldb sqldb = new sqldb(); string sql = "select T ...
- SharePoint基于windows验证的如何通过组策略实现IE自动以当前域账号登录SP站点
通过组策略实现IE自动以当前域账号登录SP站点 1. 在运行中运行MMC,启动"组策略对象编辑器". 如下图: 找到组策略如下图: 找到域 点右键编辑 找到如下图: 找到[计算机配 ...
- 如何:对 SharePoint 列表项隐藏 ECB 中的菜单项
可以通过使用功能框架向编辑控制块 (ECB) 菜单添加新的自定义操作.但是,您不能使用此方法进行相反的操作,即隐藏现有的 ECB 菜单项,因为它们是通过使用 ECMAScript(JavaScript ...
- SharePoint 2013 配置基于表单的身份认证
前 言 这里简单介绍一下为SharePoint 2013 配置基于表单的身份认证,简单的说,就是用Net提供的工具创建数据库,然后配置SharePoint 管理中心.STS服务.Web应用程序的三处w ...