问题一:
QQ里的菜单是在QQ的下面,而且向上拉的,左侧还定制图案!
请问在C#中怎么做到??有什么良策?
问题二:
写传送文件的时候,有什么高招能时速度加快,比如QQ2003和QQ2005版本在局域网内传送文件的速度就相差很多!
问题三:
分组后选择分组的下拉动作怎么做的?
QQ好友是用什么控件做的?listbox??那么在listbox中怎么贴图(好友都在图案)??
其他问题:
大家还有什么想法??和需求也可以提.
QQ里的菜单是在QQ的下面,而且向上拉的,左侧还定制图案!
请问在C#中怎么做到??有什么良策?
问题二:
写传送文件的时候,有什么高招能时速度加快,比如QQ2003和QQ2005版本在局域网内传送文件的速度就相差很多!
问题三:
分组后选择分组的下拉动作怎么做的?
QQ好友是用什么控件做的?listbox??那么在listbox中怎么贴图(好友都在图案)??
其他问题:
大家还有什么想法??和需求也可以提.
问题1:可以使用快捷菜单来做,自己绘制显示的方式
问题2:需要判定传输文件的两台计算机是否是在同一网段内,要是在同一网段内就使用内网IP进行数据传输,如果不在同一网段内才使用公网IP进行传输.使用内网IP当然快.
问题3:C#中没有类似控件,需要自己制定这个控件
问题1:可以使用快捷菜单来做,自己绘制显示的方式
能不能找个例子看看??问题2:需要判定传输文件的两台计算机是否是在同一网段内,要是在同一网段内就使用内网IP进行数据传输,如果不在同一网段内才使用公网IP进行传输.使用内网IP当然快.
那QQ2003和QQ2005版本在局域网内传送文件的速度就相差很多!是怎么回事?
还有就是我都说了是局域网QQ了当然是内网了!
不知道您有什么想法?
请赐教!
加快速度也可以使用多线程来进行
那QQ2003和QQ2005版本在局域网内传送文件的速度就相差很多!是怎么回事?
还有就是我都说了是局域网QQ了当然是内网了!对因此优化很困难 ,当然多点同时传输例外QQ2003 没有考虑我说的优化方式
是什么意思??
就一个网卡还用考虑内网公网吗?
怎么样才算用了内网IP?比方说我的IP为192.168.0.2 给192.168.0.3发文件,难道除了直接连接IP外还有什么技巧?还会使速度加快?
小弟实在是不理解,还望大哥能指点迷津.
^_^!
局域网内根本就用不着P2P!!!
/*
* by Mattias Sj鰃ren
* [email protected]
* http://www.msjogren.net/dotnet/
*
*/using System;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Reflection;
using System.Resources;
using System.Windows.Forms;
public class IconMenuItem : MenuItem
{ Icon m_Icon;
Font m_Font;
public IconMenuItem() : this( "", null, null, Shortcut.None ) { }
public IconMenuItem(string text, Icon icon, EventHandler onClick, Shortcut shortcut) :
base( text, onClick, shortcut )
{
OwnerDraw = true;
m_Font = new Font( "Comic Sans MS", 8 );
m_Icon = icon;
} public override void Dispose()
{
m_Font.Dispose();
m_Font = null;
m_Icon.Dispose();
m_Icon = null;
base.Dispose();
} public Icon Icon
{
get { return m_Icon; }
set { m_Icon = value; }
} protected override void OnMeasureItem(MeasureItemEventArgs e)
{
StringFormat sf = new StringFormat();
sf.HotkeyPrefix = HotkeyPrefix.Show;
sf.SetTabStops( 60, new float[] { 0 } ); base.OnMeasureItem( e ); e.ItemHeight = 22;
e.ItemWidth = (int) e.Graphics.MeasureString( GetRealText(), m_Font, 10000, sf ).Width + 10;
sf.Dispose();
sf = null;
} protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem( e ); Brush br;
bool fDisposeBrush = false;
if ( m_Icon != null )
e.Graphics.DrawIcon( m_Icon, e.Bounds.Left + 2, e.Bounds.Top + 2 ); Rectangle rcBk = e.Bounds;
rcBk.X += 24; if ( (e.State & DrawItemState.Selected) != 0 ) {
br = new LinearGradientBrush( rcBk, SystemColors.Highlight, SystemColors.Control, 0f );
fDisposeBrush = true;
}
else
br = SystemBrushes.Control; e.Graphics.FillRectangle( br, rcBk );
// Only Dispose the brush if we created it, not if it was retrieved from SystemBrushes
if ( fDisposeBrush )
br.Dispose(); br = null; StringFormat sf = new StringFormat();
sf.HotkeyPrefix = HotkeyPrefix.Show;
sf.SetTabStops( 60, new float[] { 0 } );
br = new SolidBrush( e.ForeColor );
e.Graphics.DrawString( GetRealText(), m_Font, br, e.Bounds.Left + 25, e.Bounds.Top + 2, sf );
br.Dispose();
br = null;
sf.Dispose();
sf = null; } private string GetRealText()
{
string s = Text; // Append shortcut if one is set and it should be visible
if ( ShowShortcut && (Shortcut != Shortcut.None) ) {
// To get a string representation of a Shortcut value, cast
// it into a Keys value and use the KeysConverter class (via TypeDescriptor).
Keys k = (Keys) Shortcut;
s += "\t" + TypeDescriptor.GetConverter( typeof(Keys) ).ConvertToString( k );
}
return s;
}} // class IconMenuItem
public class TestForm : Form
{ public static void Main()
{
Application.Run( new TestForm() );
} public TestForm()
{
Text = "IconMenu sample";
InitMenu();
} private void InitMenu()
{ ResourceManager rm = new ResourceManager( "iconmenu", Assembly.GetExecutingAssembly() );
MainMenu mm = new MainMenu();
MenuItem fm = new MenuItem( "&File" );
EventHandler handler = new EventHandler( OnMenuItemClick );
Menu = mm;
mm.MenuItems.Add( fm ); fm.MenuItems.Add( new IconMenuItem( "&Open...", (Icon)rm.GetObject( "icon_open" ), handler, Shortcut.CtrlO ) );
fm.MenuItems.Add( new IconMenuItem( "&Save", (Icon)rm.GetObject("icon_save"), handler, Shortcut.CtrlS ) );
fm.MenuItems.Add( new MenuItem("-") );
fm.MenuItems.Add( new IconMenuItem( "&Exit", (Icon)rm.GetObject("icon_exit"), handler, Shortcut.None ) ); } private void OnMenuItemClick(object sender, EventArgs e)
{ switch ( ((MenuItem)sender).Index ) {
case 0: // Open
MessageBox.Show( "Open selected" ); break;
case 1: // Save
MessageBox.Show( "Save selected" ); break;
case 3: // Exit
Close(); break;
} }} // TestForm
using System.Resources;public class CreateResources
{ public static void Main()
{ ResourceWriter rw = new ResourceWriter( "iconmenu.resources" ); rw.AddResource( "icon_open", new Icon( @"..\open.ico" ) );
rw.AddResource( "icon_save", new Icon( @"..\save.ico" ) );
rw.AddResource( "icon_exit", new Icon( @"..\exit.ico" ) ); rw.Close(); }}
不过还有个问题就是怎么把菜单放倒Winform的任意位置,QQ菜单是放在下面的,怎么才能做到呢?
再次谢谢 黑郁金香 非常感谢!
答完这题马上结帖.
又没有提供源代码,还不如研究QQ呢.
假设192.168.0.2要发送文件给192.168.0.3
QQ2003的数据传输方式是
192.168.0.2->192.168.0.1->61.1.1.1->QQ服务器->61.1.1.1->192.168.0.1->192.168.0.3
QQ2004的数据传输方式是
if(QQ服务器协调->是否是在同一内网内)
{
192.168.0.2->192.168.0.3
}
else
{
192.168.0.2->192.168.0.1->61.1.1.1->QQ服务器->61.1.1.1->192.168.0.1->192.168.0.3}
希望楼主可以明白
不过还是谢谢zhiang75(zhiang75)仁兄!