ÔÆÌ⺣ - רҵÎÄÕ·¶ÀýÎĵµ×ÊÁÏ·ÖÏíÆ½Ì¨

µ±Ç°Î»ÖãºÊ×Ò³ > C#WinForm±à³Ì(3).µÚ33ÕÂʹÓÃGDI+»æÍ¼

C#WinForm±à³Ì(3).µÚ33ÕÂʹÓÃGDI+»æÍ¼

  • 62 ´ÎÔĶÁ
  • 3 ´ÎÏÂÔØ
  • 2025/5/5 16:44:08

Sender, CancelEventArgs e) { this.LoadFile(fileOpenDialog.FileName); } protected void menuFileOpen_Click(object sender, EventArgs e) { fileOpenDialog.ShowDialog(); } protected void menuFileExit_Click(object sender, EventArgs e) { this.Close(); } ÏÂÃæ½éÉÜLoadFile()·½·¨¡£Õâ¸ö·½·¨´¦ÀíÎļþµÄ´ò¿ªºÍ¶ÁÈ¡²Ù×÷£¬²¢È·±£Òý·¢Paintʼþ£¬Ê¹ÓÃÐÂÎļþÖØÐ»æÍ¼£º private void LoadFile(string FileName) { StreamReader sr = new StreamReader(FileName); string nextLine; documentLines.Clear(); nLines = 0; TextLineInformation nextLineInfo; while ( (nextLine = sr.ReadLine()) != null) { nextLineInfo = new TextLineInformation(); nextLineInfo.Text = nextLine; documentLines.Add(nextLineInfo); ++nLines; } sr.Close(); documentHasData = (nLines>0) ? true : false; CalculateLineWidths(); CalculateDocumentSize(); this.Text = standardTitle + \this.Invalidate(); } Õâ¸ö¹¦ÄܵĴ󲿷ֶ¼ÊDZê×¼µÄÎļþ¶ÁÈ¡¹ý³Ì(²Î¼ûµÚ25ÕÂ)¡£×¢ÒâÔÚ¶ÁÈ¡Îļþʱ£¬¸ødocumentLines ArrayListÌí¼ÓÎı¾ÐУ¬Ê¹Õâ¸öÊý×é×îÖÕ°´Ë³Ðò°üº¬Ã¿ÐÐÎı¾µÄÐÅÏ¢¡£ÔÚ¶ÁÈ¡Îļþºó£¬ÉèÖÃdocumentHasDat±ê¼Ç£¬Ö¸¶¨ÊÇ·ñÒªÏÔʾÐÅÏ¢¡£ÏÂÒ»¸öÈÎÎñÊÇÈ·¶¨ÒªÏÔʾÄÚÈݵÄλÖã¬Ö®ºóÈ·¶¨ÏÔʾÎļþµÄ¿Í»§ÇøÓòÓжà´ó-- ¼´ÓÃÓÚÉèÖùö¶¯ÌõµÄÎĵµ´óС¡£×îºó£¬ÉèÖñêÌâÀ¸Îı¾£¬²¢µ÷ÓÃInvalidate()¡£ Invalidate()ÊÇMicrosoftÌṩµÄÒ»¸ö·Ç³£ÖØÒªµÄ·½·¨£¬ËùÒÔÏÂÒ»½Ú½éÉÜÕâ¸ö·½·¨µÄÓ¦Óã¬Ö®ºó½éÉÜCalculateLineWidths()ºÍCalculateDocument Size()·½·¨µÄ´úÂë¡£

33.15.1 Invalidate()·½·¨

Invalidate()ÊÇSystem.Windows.Forms.FormµÄÒ»¸ö³ÉÔ±£¬Ëü°Ñ¿Í»§´°¿ÚÇøÓò±ê¼ÇΪÎÞЧ£¬Òò´ËÔÚÐèÒªÖØÐ»æÖÆÊ±£¬Ëü¿ÉÒÔÈ·±£Òý·¢Paintʼþ¡£Invalidate()ÓÐÁ½¸öÖØÔØ·½·¨£º¿ÉÒÔ¸øËü´«ËÍÒ»¸ö¾ØÐΣ¬Ö¸¶¨(ʹÓÃÒ³Ãæ×ø±ê)ÐèÒªÖØÐ»æÖÆÄĸö´°¿ÚÇøÓò£¬Èç¹û²»ÌṩÈκβÎÊý£¬Ëü¾Í°ÑÕû¸ö¿Í»§ÇøÓò±ê¼ÇΪÎÞЧ¡£

Èç¹ûÖªµÀÐèÒª»æÖÆÄ³Ð©ÄÚÈÝ£¬ÎªÊ²Ã´²»µ÷ÓÃOnPaint()»òÖ±½ÓÍê³É»æÖÆÈÎÎñµÄÆäËû·½·¨£¿Ò»°ãÇé¿öÏ£¬×îºÃ²»ÒªÖ±½Óµ÷ÓûæÍ¼Àý³Ì£¬Èç¹û´úÂëÒªÍê³ÉijЩ»æÍ¼ÈÎÎñ£¬Ò»°ãÓ¦µ÷ÓÃInvalidate()¡£ÆäÔ­ÒòÈçÏÂËùʾ£º

¡ñ »æÍ¼×ÜÊÇGDI+Ó¦ÓóÌÐòÖ´ÐеÄÒ»ÖÖ´¦ÀíÆ÷Ãܼ¯Ð͵ÄÈÎÎñ¡£ÔÚÆäËû¹¤×÷µÄÖÐ¼ä½øÐлæÍ¼»á·Á°­ÆäËû¹¤×÷µÄ½øÐС£ÔÚÇ°ÃæµÄʾÀýÖУ¬Èç¹ûÔÚLoadFile()·½·¨ÖÐÖ±½Óµ÷ÓÃÒ»¸ö·½·¨À´Íê³É»æÍ¼£¬LoadFile()·½·¨¾Í½«ÔÚ»æÍ¼¹¤×÷Íê³Éºó²ÅÄÜ·µ»Ø¡£ÔÚÕâ¶Îʱ¼äÀӦÓóÌÐò²»»áÏìÓ¦ÆäËûʼþ¡£ÁíÒ»·½Ã棬ͨ¹ýµ÷ÓÃInvalidate()£¬ÔÚ´ÓLoadFile·µ»ØÖ®Ç°£¬¾Í¿ÉÒÔÈÃWindowsÒý·¢Ò»¸öPaintʼþ¡£½Ó×ÅWindows¾Í¿ÉÒÔ¼ì²éµÈ´ý´¦ÀíµÄʼþÁË¡£ÆäÄÚ²¿µÄ¹¤×÷·½Ê½ÊÇʼþ±»µ±×÷ÏûÏ¢¶ÓÁÐÖÐÒ»¸öÏûÏ¢¡£Windows»á¶¨ÆÚ¼ì²é¸Ã¶ÓÁУ¬Èç¹ûÆäÖÐÓÐʼþ£¬Windows¾ÍÑ¡ÔñËü£¬²¢µ÷ÓÃÏàÓ¦µÄʼþ´¦Àí³ÌÐò¡£ÏÖÔÚPaintʼþÊǶÓÁÐÖеÄΨһʼþ£¬ËùÒÔOnPaint()»á±»Á¢¼´µ÷Óᣵ«ÊÇ£¬ÔÚÒ»¸ö±È½Ï¸´ÔÓµÄÓ¦ÓóÌÐòÖУ¬¿ÉÄÜ»áÓÐÆäËûʼþ£¬ÆäÖÐһЩµÄÓÅÏÈȨ±ÈOnPaint()¸ß¡£ÌرðÊÇÈç¹ûÓû§ÒѾö¶¨Í˳öÓ¦ÓóÌÐò£¬¸Ãʼþ¾Í»áÓÃÏûÏ¢WM_QUITÀ´±ê¼Ç¡£

¡ñ Èç¹ûÓÐÒ»¸ö±È½Ï¸´ÔӵĶàÏß³ÌÓ¦ÓóÌÐò£¬¾Í»áÏ£ÍûÓÃÒ»¸öÏ̴߳¦ÀíËùÓеĻæÍ¼²Ù×÷¡£Ê¹ÓÃInvalidate()¿ÉÒÔ°ÑËùÓеĻæÍ¼²Ù×÷´«µÝµ½ÏûÏ¢¶ÓÁÐÖУ¬ÕâÓÐÖúÓÚÈ·±£ÎÞÂÛÆäËûÏß³ÌÇëÇóʲô»æÍ¼²Ù×÷£¬¶¼ÓÉͬһ¸öÏß³ÌÍê³ÉËùÓеĻæÍ¼²Ù×÷(ÎÞÂÛʲôÏ̸߳ºÔðÏûÏ¢¶ÓÁУ¬¶¼ÊÇÓÉÏß³ÌApplication.Run()´¦Àí»æÍ¼²Ù×÷)¡£

¡ñ »¹ÓÐÒ»¸öÓëÐÔÄÜÓйصÄÔ­Òò¡£¼Ù¶¨ÔÚijһʱ¿ÌÓм¸¸ö²»Í¬µÄÆÁÄ»»æÖÆÇëÇó£¬Ò²Ðí´úÂë½öÄÜÐÞ¸ÄÎĵµ£¬ÒÔÈ·±£ÏÔʾ¸üеÄÎĵµ£¬¶øÍ¬Ê±Óû§¸Õ¸ÕÒÆ¿ªÁíÒ»¸ö¸²¸Ç²¿·Ö¿Í»§ÇøÓòµÄ´°¿Ú¡£µ÷ÓÃInvalidate()£¬¿ÉÒÔÈÃWindows×¢Òâµ½·¢ÉúµÄʼþ¡£Windows¾Í»áÔÚÐèҪʱºÏ²¢Paintʼþ£¬ºÏ²¢ÎÞЧµÄÇøÓò£¬ÕâÑù»æÍ¼²Ù×÷¾ÍÖ»Ö´ÐÐÒ»´Î¡£

¡ñ ×îºó£¬Ö´ÐлæÍ¼µÄ´úÂë¿ÉÄÜÊÇÓ¦ÓóÌÐòÖÐ×ÔӵĴúÂ벿·Ö£¬ÌرðÊǵ±ÓÐÒ»¸ö±È½Ïרҵ»¯µÄÓû§½çÃæÊ±£¬¾Í¸üÊÇÈç´Ë¡£ÐèÒª³¤Ê±¼äά»¤¸Ã´úÂëµÄÈËԱϣÍûÎÒÃǰÑËùÓеĻæÍ¼´úÂë¶¼·ÅÔÚÒ»¸öµØ·½£¬ÇÒ¾¡¿ÉÄܼòµ¥-- Èç¹û³ÌÐòµÄÆäËû²¿·ÖûÓйý¶àµÄ·¾¶½øÈë¸Ã´úÂ벿·Ö£¬Î¬»¤¾Í¸üÈÝÒס£ Æäµ×ÏßÊÇ×îºÃ°ÑËùÓеĻæÍ¼´úÂë¶¼·ÅÔÚOnPaint()Àý³ÌÖУ¬»òÕßÔڸ÷½·¨Öе÷ÓÃµÄÆäËû·½·¨¡£µ«ÊÇҪά³ÖÒ»¸öƽºâ¡£Èç¹ûÒªÔÚÆÁÄ»ÉÏÌæ»»Ò»¸ö×Ö·û£¬×îºÃ²»ÒªÓ°Ïìµ½ÒѾ­»æÖÆºÃµÄÆäËûÄÚÈÝ£¬´Ëʱ¿ÉÄܲ»ÐèҪʹÓÃInvalidate()£¬¶øÖ»Ðè±àдһ¸ö¶ÀÁ¢µÄ»æÍ¼Àý³Ì¡£ ×¢Ò⣺ Ôڷdz£¸´ÔÓµÄÓ¦ÓóÌÐòÖУ¬ÉõÖÁ¿ÉÒÔ±àдһ¸öÍêÕûµÄÀ࣬רߺÔðÔÚÆÁÄ»ÉÏ»æÍ¼¡£¼¸ÄêǰMFCÈÔÊÇGDIÃܼ¯ÐÍÓ¦ÓóÌÐòµÄ±ê×¼¼¼Êõ£¬MFC¾Í×ñÑ­Õâ¸öģʽ£¬Ê¹ÓÃÒ»¸öC++ÀàCViewÍê³É»æÍ¼²Ù×÷¡£µ«¼´Ê¹ÊÇÕâÑù£¬Õâ¸öÀàÒ²ÓÐÒ»¸ö³ÉÔ±º¯ÊýOnDraw()£¬ÓÃ×÷´ó¶àÊý»æÍ¼ÇëÇóµÄÈë¿Úµã¡£ 33.15.2 ¼ÆËãÏîºÍÎĵµµÄ´óС ÏÂÃæ·µ»ØCapsEditorʾÀý£¬½éÉÜÔÚLoadFile()Öе÷ÓõÄCalculateLineWidths()ºÍCalculate DocumentSize()·½·¨£º private void CalculateLineWidths() { Graphics dc = this.CreateGraphics(); foreach (TextLineInformation nextLine in documentLines) { nextLine.Width = (uint)dc.MeasureString(nextLine.Text, mainFont).Width; } } Õâ¸ö·½·¨½ö±éÀúÒѾ­¶ÁÈ¡µÄÿÐÐÎı¾£¬Ê¹ÓÃGraphics.MeasureString()·½·¨´¦ÀíºÍ´æ´¢×Ö·û´®ÐèÒªµÄˮƽ¼ä¾à¡£´æ´¢Õâ¸öÖµÊÇÒòΪMeasureString()Òª½øÐдóÁ¿µÄ¼ÆËã¡£Èç¹ûûÓаÑCapsEditorʾÀý±àдµÃ·Ç³£¼òµ¥£¬¾Í²»ÄܺÜÈÝÒ׵ؼÆËã³öÿһÐеĸ߶ȺÍλÖ㬶øÕâ¸ö·½·¨Ò²¿Ï¶¨ÐèÒª°´¼ÆËãËùÓÐÏîµÄ·½Ê½À´ÊµÏÖ¡£ ÖªµÀÆÁÄ»ÉÏÿ¸öÏîµÄ´óСºó£¬¾Í¿ÉÒÔ¼ÆËãÿ¸öÏîµÄλÖ㬲¢¼ÆËã³öÎĵµµÄ´óС¡£¸ß¶È»ù±¾ÉÏÊÇÿÐÐÎı¾µÄ¸ß¶È³ËÒÔÐÐÊý¡£¿í¶ÈÔòÐèÒª¼ÆË㣬±éÀúÿÐÐÎı¾£¬È·¶¨ÄÄÒ»ÐÐ×¡£¶ÔÓڸ߶ȺͿí¶È£¬Ò²¿ÉÒÔÔÚÏÔʾµÄÎĵµÖÜΧÉèÖÃÒ»¸ö½ÏСµÄÒ³±ß¾à£¬Ê¹Ó¦ÓóÌÐò¿´ÆðÀ´¸üÎüÒýÈË¡£ ÏÂÃæÊǼÆËãÎĵµ´óСµÄ·½·¨£º private void CalculateDocumentSize() { if (!documentHasData) { documentSize = new Size(100, 200); } else { documentSize.Height = (int)(nLines*lineHeight) + 2*(int)margin; uint maxLineLength = 0; foreach (TextLineInformation nextWord in documentLines) { uint tempLineLength = nextWord.Width + 2*margin; if (tempLineLength > maxLineLength) maxLineLength = tempLineLength; } maxLineLength += 2*margin; documentSize.Width = (int)maxLineLength; } this.AutoScrollMinSize = documentSize; } Õâ¸ö·½·¨Ê×Ïȼì²éÊÇ·ñÓÐÊý¾ÝÒªÏÔʾ¡£Èç¹ûûÓУ¬¾ÍʹÓÃÓ²±àÂëµÄÎĵµ´óС£¬¸Ã´óС×ãÒÔÏÔʾºÜ´óµÄºìÉ«¾¯¸æ¡£Èç¹ûÒªÕýÈ·ÏÔʾÊý¾Ý£¬¾ÍӦʹÓÃMeasureString()È·¶¨¾¯¸æÐÅÏ¢µ½µ×Óжà´ó¡£

¼ÆËã³öÎĵµ´óСºó£¬¾ÍÉèÖÃForm.AutoScrollMinSizeÊôÐÔ£¬¸æËßFormʵÀýÎĵµÓжà´ó¡£Íê³Éºó£¬ºǫ́¾Í»á·¢ÉúһЩÓÐȤµÄÊ¡£ÔÚÉèÖÃÕâ¸öÊôÐԵĹý³ÌÖУ¬¿Í»§ÇøÓò»á±ê¼ÇΪÎÞЧ£¬Òý·¢Paintʼþ¡£¸Ä±äÎĵµµÄ´óС¾ÍÒâζ×ÅÐèÒªÌí¼Ó»òÐ޸Ĺö¶¯Ìõ£¬ÐèÒªÖØÐ»æÖÆÕû¸ö¿Í»§ÇøÓò¡£ÎªÊ²Ã´ËµÕâºÜÓÐȤ£¿Èç¹û»Ø¹ýÍ·À´¿´¿´LoadFile()µÄ´úÂ룬¾Í»á·¢ÏÖÔڸ÷½·¨Öе÷ÓÃInvalidate()ÊǶàÓàµÄ¡£ÔÚÉèÖÃÎĵµ´óСʱ£¬¿Ï¶¨ÒªÊ¹¿Í»§ÇøÓòÎÞЧ¡£ÔÚLoadFile()·½·¨ÖÐÏÔʽµ÷ÓÃInvalidate()£¬ËµÃ÷ÁËÔÚÒ»°ãÇé¿öÏÂÓ¦ÈçºÎÍê³ÉÈÎÎñ¡£Êµ¼ÊÉÏÔÚÕâ¸öʾÀýÖУ¬Ôٴε÷ÓÃInvalidate()½«Öظ´ÇëÇóPaintʼþ£¬ÕâÊDz»±ØÒªµÄ¡£µ«ÊÇ£¬ÕâÂÛÖ¤ÁËÇ°ÃæÂÛÊöµÄInvalidate()¸øWindowsÒ»¸öÓÅ»¯ÐÔÄܵĻú»á¡£µÚ¶þ¸öPaintʼþʵ¼ÊÉϲ¢²»»á±»Òý·¢£ºWindows·¢ÏÖ¶ÓÁÐÖÐÒѾ­ÓÐÒ»¸öPaintʼþÁË£¬¾Í»á±È½ÏÇëÇóµÄÎÞÐ§ÇøÓò£¬¿´¿´ÊÇ·ñÐèÒªºÏ²¢ËüÃÇ¡£ÔÚ±¾ÀýÖУ¬Á½¸öPaintʼþ¶¼Ö¸¶¨ÁËÕû¸ö¿Í»§ÇøÓò£¬ËùÒÔ²»ÐèÒªºÏ²¢£¬Windows»á³·ÏûµÚ¶þ¸öPaintÇëÇó¡£µ±È»£¬Õâ¸ö¹ý³Ì»áÕ¼Óô¦ÀíÆ÷Ò»¶¨µÄʱ¼ä£¬µ«ÓëijЩ»æÍ¼²Ù×÷ËùÕ¼ÓõÄʱ¼äÏà±È£¬Ëü¿ÉÒÔºöÂÔ²»¼Æ¡£

33.15.3 OnPaint()

ËÑË÷¸ü¶à¹ØÓÚ£º C#WinForm±à³Ì(3).µÚ33ÕÂʹÓÃGDI+»æÍ¼ µÄÎĵµ
  • ÊÕ²Ø
  • Î¥¹æ¾Ù±¨
  • °æÈ¨ÈÏÁì
ÏÂÔØÎĵµ10.00 Ôª ¼ÓÈëVIPÃâ·ÑÏÂÔØ
ÍÆ¼öÏÂÔØ
±¾ÎÄ×÷Õߣº...

¹²·ÖÏí92ƪÏà¹ØÎĵµ

Îĵµ¼ò½é£º

Sender, CancelEventArgs e) { this.LoadFile(fileOpenDialog.FileName); } protected void menuFileOpen_Click(object sender, EventArgs e) { fileOpenDialog.ShowDialog(); } protected void menuFileExit_Click(object sender, EventArgs e) { this.Close(); } ÏÂÃæ½éÉÜLoadFile()·½·¨¡£Õâ¸ö·½·¨´¦ÀíÎļþµÄ´ò¿ªºÍ¶ÁÈ¡²Ù×÷£¬²¢È·±£Òý·¢Paintʼþ£¬Ê¹ÓÃÐÂÎļþÖØÐ»æÍ¼£º private void LoadFile(string FileName) { StreamReader sr = new StreamReade

¡Á ÓοͿì½ÝÏÂÔØÍ¨µÀ£¨ÏÂÔØºó¿ÉÒÔ×ÔÓɸ´ÖƺÍÅŰ棩
µ¥Æª¸¶·ÑÏÂÔØ
ÏÞÊ±ÌØ¼Û£º10 Ôª/·Ý Ô­¼Û:20Ôª
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
VIP°üÔÂÏÂÔØ
ÌØ¼Û£º29 Ôª/Ô ԭ¼Û:99Ôª
µÍÖÁ 0.3 Ôª/·Ý ÿÔÂÏÂÔØ150·Ý
ȫվÄÚÈÝÃâ·Ñ×ÔÓɸ´ÖÆ
×¢£ºÏÂÔØÎĵµÓпÉÄÜ¡°Ö»ÓÐĿ¼»òÕßÄÚÈݲ»È«¡±µÈÇé¿ö£¬ÇëÏÂÔØÖ®Ç°×¢Òâ±æ±ð£¬Èç¹ûÄúÒѸ¶·ÑÇÒÎÞ·¨ÏÂÔØ»òÄÚÈÝÓÐÎÊÌ⣬ÇëÁªÏµÎÒÃÇЭÖúÄã´¦Àí¡£
΢ÐÅ£ºfanwen365 QQ£º370150219
Copyright © ÔÆÌ⺣ All Rights Reserved. ËÕICP±¸16052595ºÅ-3 ÍøÕ¾µØÍ¼ ¿Í·þQQ£º370150219 ÓÊÏ䣺370150219@qq.com