• 0

Strange behavior in FormBorderStyle between Fixed and Sizable


Question

I have created a simple test form with FormBorderStyle = FixedToolWindow by default and added a piece of code to the form DoubleClick event that will switch between FixedToolWindow and SizableToolWindow.

Switching the FormBorderStyle between these two seems to produce a weird effect that's causing a lot of issues on my application. The problem is that the window seems to change size and I can't have that. I just want to change the border, I need the form size to remain the same.

For instance, here's the event code:

private void Settings_DoubleClick(object sender, System.EventArgs e) {
	if(FormBorderStyle == FormBorderStyle.FixedToolWindow) {
		System.Diagnostics.Debug.WriteLine("SWITCHINGED -> SIZABLE");
		FormBorderStyle = FormBorderStyle.SizableToolWindow;
	} else {
		System.Diagnostics.Debug.WriteLine("SWITCHINGABLE -> FIXED");
		FormBorderStyle = FormBorderStyle.FixedToolWindow;
	}
}

And to debug I use this:

private void Settings_SizeChanged(object sender, System.EventArgs e) {
	System.Diagnostics.Debug.WriteLine(this.Size);
}

And here's the output when I double click:

SWITCHING: FIXED -> SIZABLE
{Width=373, Height=169}
{Width=383, Height=179}
SWITCHING: SIZABLE -> FIXED
{Width=383, Height=179}
{Width=373, Height=169}

How can I fix this behavior? And by "fix", I mean, prevent this from happening if possible. I want to be able to specify my form size and to remain like that, no matter the type of border style.

Also, a solution by subclassing the Form class would be the perfect solution for me in case anyone as any ideas to solve this problem with such a method.

7 answers to this question

Recommended Posts

  • 0

Could you maintain the size property before and after the border-style change? What could be happening is that the Window size is being modified due to the change in border size for resizeable windows.

private void Settings_DoubleClick(object sender, System.EventArgs e) {
	Size size = this.Size;
	if(FormBorderStyle == FormBorderStyle.FixedToolWindow) {
		System.Diagnostics.Debug.WriteLine("SWITCHINGED -> SIZABLE");
		FormBorderStyle = FormBorderStyle.SizableToolWindow;
	} else {
		System.Diagnostics.Debug.WriteLine("SWITCHINGABLE -> FIXED");
		FormBorderStyle = FormBorderStyle.FixedToolWindow;
	}
	this.Size = size;
}

  • 0

I made a little video to demonstrate the problem. The first test shows that the form size doesn't actually change (visually), only the location of the form changes a little bit; but the values for the Size property do change, as you can see on the debug output. The second test you will see on the debug output that the form Size property values change and the window size itself will also change.

Please look here:

http://screencast.com/t/0vT1vCoyx2u

  • 0

I switched to the classic theme to get an idea of what was happening. It appears that when switching, the thickness of the border changes probably due to the style being set to thick frame for resizing. My guess is that you're seeing that a little more dramatically with the Aero theme as the frames are thicker. I don't know that you'll be able to get around it unless you subclass and set the window to not have a WS_THICKFRAME when the form border style is sizable, but then you're modifying OS behavior to accommodate resizing with a thicker frame.

Your actual client rectangle isn't being resized at all. It's the non-client areas that are changing.

Don't ask me why fixed is larger than sizable... I couldn't say. You may want to hit the forums on MSDN.

Edited by azcodemonkey
  • 0

The border is thicker on Classic and on XP but not on Vista. On Vista, if you look closely, the border has the same size or so it looks like.

Is there anything wrong in "modifying OS behavior to accommodate resizing with a thicker frame"?

I'll put this on the MSDN forums them...

In the meantime I realized something else:

The problem lies on all types of fixed border styles like FixedDialog, Fixed3D, FixedSingle and FixedToolWindow. It does not happen on the sizable ones. This problem, like I said, it also happens only on Vista.

Let's say you have a form with any of the fixed border styles and set the starting location to 0,0. What you want here is for the form to be snapped to the top left corner of the screen. This works just fine if the form border style is one of the sizable options, if it's fixed, well, the form will be a little bit outside of the screen working area both to the left and top.

What's more strange about this is that the form location does not change, it sill is 0,0, but a few pixels of the form are still drawn outside of the working screen area.

I tested this on XP and it didn't happen, the problem is Vista specific. On XP, the only difference was the border size that change a bit between any of the styles. But the form was always perfectly snapped to position 0,0.

  • 0

It's pretty bizarre behavior, for sure. I did notice that the frame still looks the same in Vista.

I've used Spy++ to verify what I'm seeing, and the frame is indeed set to WS_THICKFRAME when sizable and in Aero. Also, I'm seeing that TOP, LEFT, BOTTOM, an RIGHT of the client rectangle are what is changing, along with the overall window rectangle size to accommodate the thicker frame. I'm guessing that MS changed how frames are rendered with Aero.

Sizable:

thickframe.jpg

Fixed:

notsizable.jpg

What it means, I'm still fuzzy on. This could be a bug in DWM.

  • 0

Some people have been helping me over at the MSDN forums and one of them provided a solution that would solve the problem. The catch was that the app would no longer work on XP...

Anyway, the reason I want to do this is to allow my application, which has a skin applied, to enable or disable that skin. The whole application is working fine with the skin and I was trying to implement a property to enable and disable the skin. The issue on this topic was one of the problems I'm having when the skin is disabled. I then realized that I also have a lot of other annoying problems to deal with if the skin is disabled. Which means I'll just forget about this feature for now and leave the skin always on in the time being. I just don't have the time to handle so many issues right now...

Thanks for all your help though :)

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Google's AI Ultra for Business supercharges Workspace with advanced AI and next-gen tools by Fiza Ali Google has announced the launch of Google AI Ultra for Business, a new add-on for Workspace that delivers the highest-tier AI models and next-generation tools to organisations. Subscribers gain priority access to the Gemini app’s most capable models; Gemini 2.5 Pro, Veo 3, and Deep Research, and will soon be able to use Deep Think as well. In addition, AI Ultra for Business increases usage limits within NotebookLM, granting access to the best available models when they arrive later this year. Users will also benefit from higher quotas for Audio Overviews, notebooks, queries, and sources per notebook, and will be able to enjoy customisable notebook styles and response lengths. Furthermore, organisations on Business or Enterprise Standard and Plus plans already have Gemini integrated across Workspace apps such as Gmail, Docs, and Sheets. Other qualifying Workspace customers can now obtain the majority of these AI-powered features by adding the AI Ultra for Business. When it comes to creative teams, they will find new capabilities in Flow, Google’s AI filmmaking suite, which uses Veo 3 and premium features to generate consistent, cinematic clips from reference images. Subscribers will also get access to Whisk, the dual text-and-image prompt tool that enables idea exploration and visualisation, while Whisk Animate will allow them to turn still images into eight-second video clips using Veo 2. In the United States, access to Project Mariner offers a research prototype that allows users to assign AI agents to carry out tasks, such as research and data entry, concurrently in the background. The tech giant says that all core services accessed via Google AI Ultra for Business (Gemini in Workspace, the Gemini app, and NotebookLM) are protected by enterprise-grade data safeguards under the Google Workspace Terms of Service or applicable offline agreements. Moreover, user content is not subject to human review nor used to train Google’s generative models outside the user’s domain without explicit permission. Flow, Whisk, and Project Mariner operate under their own privacy policies, which customers are encouraged to review. From 26 June 2025, the add-on is available for self-service purchase by organisations on Business Starter, Standard and Plus, and Enterprise Starter, Standard and Plus. Each licence includes 12,500 AI credits per month for use in Flow, Whisk, and any other credit-enabled products. As far as availability is concerned, it varies by country and by feature, so customers are advised to check the Workspace Help Centre for specific details. Google also plans to roll out Google AI Ultra for Business to G Suite Legacy Free Edition and Education customers in the coming weeks.
    • Pro Max Plus. That had to be some sort of parody.
    • YouTube adds AI summaries to search results and expands conversational AI testing by David Uzondu Today, YouTube announced it is adding two new AI features, and one is sort of like AI overviews for its search results. The platform is also expanding access to its conversational AI tool that can answer questions about the video you are currently watching. The primary update is a new AI-powered search results carousel. For now, this is exclusively for YouTube Premium members located in the United States. When you search for something like "best beaches in Hawaii," YouTube might generate a special carousel with short video clips and brief AI-written topic descriptions. It's interesting to see YouTube try this, especially since Google's own AI Overviews had some dangerous hallucination issues at launch, like that infamous suggestion to add non-toxic glue to pizza. The other update involves its conversational AI tool, which it introduced back in 2023. YouTube is now starting to test this with some non-Premium users in the US as well. If you are part of the test, you will see a new button labeled "Ask" positioned near the like and share buttons below a video. Tapping it lets you directly ask questions about the content. For instance, if you are watching a tutorial, you could ask for a summary or even for a quiz on the main points. It feels like every company is desperately shoving a chatbot into its products now. For creators, the AI-generated search carousel might turn into a serious problem. If people are getting everything they need from a summary without ever clicking through, there's not much reason to watch the actual video. That means fewer views, less watch time, and less money. Bad news if YouTube is your job. YouTube says the AI pulls from creator videos to make these summaries, but a quiet nod isn't the same as sending real traffic. And it's still unclear if any of that credit actually helps creators in a meaningful way.
    • Oh for crying out loud, more AI rubbish. It gets everywhere, well almost. i use Numbers on the Mac, which does what I need, at the moment I can turn any AI off, but maybe i should go back to LibreOffice.
    • Google Sheets gets exciting Gemini feature that is still missing in Excel by Usama Jawad We recently learned that Copilot in Microsoft Excel got a big upgrade in the form of context awareness, which is in addition to the formula generation capabilities that were made available earlier. However, no firm has really won the AI race yet, and Google has now edged ahead in at least one domain today, by adding Gemini text generation capabilities in Google Sheets. In a blog post, Google has announced that while you can already leverage Gemini in Sheets to generate charts and insights, you can now generate text using its new AI function too. This function can utilize a natural language prompt and an optional context window to summarize and generate text, categorize information, and perform sentiment analysis. The syntax for the AI function is fairly straightforward: AI("prompt",[optional range]) So you can invoke the Gemini function as follows: =AI("Perform sentiment analysis on the emails sent by the customers to the barbershop.", C2) Or: =AI("Create an email to the reviewer addressing specific items in their reviews.", A2:G2) It is very interesting to note that a similar capability is not offered by Copilot in Excel yet. In my testing, I did get Copilot to generate charts, formulas, and do some text formatting, it simply doesn't seem to have the ability to actually generate textual data directly in a workbook just yet. While an input range isn't mandatory, Google recommends using it for the best results. Just like any cell using a formula, you can refresh the AI cell, and get an indicator about its sync state. That said, a limitation that is present with regards to the AI function is that it only works for the first 200 selected cells in your range. Once that generation completes, you can select more cells and repeat the process, which is a slightly cumbersome experience. The rollout for this capability has begun across Business, Enterprise, Education, Education Premium, AI Pro, and Ultra plans, so it should be available to everyone sooner rather than later. In the meantime, you can view details about the AI function here.
  • Recent Achievements

    • Conversation Starter
      Kavin25 earned a badge
      Conversation Starter
    • One Month Later
      Leonard grant earned a badge
      One Month Later
    • Week One Done
      pcdoctorsnet earned a badge
      Week One Done
    • Rising Star
      Phillip0web went up a rank
      Rising Star
    • One Month Later
      Epaminombas earned a badge
      One Month Later
  • Popular Contributors

    1. 1
      +primortal
      544
    2. 2
      ATLien_0
      206
    3. 3
      +FloatingFatMan
      177
    4. 4
      Michael Scrip
      148
    5. 5
      snowy owl
      118
  • Tell a friend

    Love Neowin? Tell a friend!